面向切面編程,即事務,日志,權限,貫穿在程序所有角落的一系列動作。
正常的業(yè)務需要豎著往下走,AOP是橫向的擺著,方便專注于業(yè)務代碼的開發(fā)。
aop代理有靜態(tài)代理,jdk動態(tài)代理,cglib動態(tài)代理
通過動態(tài)代理的方式可以實現橫向擴展,實現權限效驗,日志等工能
jdk的靜態(tài)代理:代理類和委托類實現同一接口,并且在代理類中需要硬編碼接口
jdk的動態(tài)代理:代理類和委托類實現同一接口,主要是通過實現InvocationHandler并重寫invoke方法來進行動態(tài)代理的,在invoke方法中將對方法進行增強處理
CGlib動態(tài)代理:代理類委托自己的父類并且為其中非final委托方法創(chuàng)建兩個方法,一個是委托方法簽名相同的方法,他在方法中通過super調用委托方法,另一個是代理類獨有的方法。在代理類獨有的方法中,他會判斷是否存在實現了MethodInterceptor接口對象,若存在則將調用intercept方法進行代理
使用CGlib生成代理:對于不使用接口的業(yè)務類,無法使用JDK動態(tài)代理
CGlib采用非常底層字節(jié)碼技術,可以為一個類創(chuàng)建子類,解決無接口代理問題