AOP允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開發(fā)琼懊。應(yīng)用只實(shí)現(xiàn)業(yè)務(wù)邏輯即可脂矫,并不負(fù)責(zé)其它的系統(tǒng)級(jí)關(guān)注點(diǎn)器一。
AOP的應(yīng)用場(chǎng)景
日志記錄、跟蹤罐旗、監(jiān)控與優(yōu)化,性能統(tǒng)計(jì)唯蝶、優(yōu)化九秀、安全、權(quán)限控制粘我,應(yīng)用系統(tǒng)的異常捕捉及處理鼓蜒,事務(wù)處理,緩存征字,持久化都弹,懶加載,內(nèi)容傳遞匙姜,調(diào)試畅厢,資源池,同步氮昧。
AOP種類
靜態(tài)AOP
- Aspect形式或详,通過特定的編輯器,將實(shí)現(xiàn)后的Aspect編譯并織入到系統(tǒng)的靜態(tài)類中郭计。
動(dòng)態(tài)AOP
- AOP的織入過程在系統(tǒng)運(yùn)行開始之后進(jìn)行霸琴,而不是預(yù)先編譯到系統(tǒng)中。
AOP的實(shí)現(xiàn)方法
靜態(tài):利用代理實(shí)現(xiàn)AOP功能
代理工廠實(shí)現(xiàn)InvocationHandler接口
新建學(xué)生代理方法返回Proxy.newProxyInstance方法 (入?yún)?目標(biāo)對(duì)象的類加載器昭伸, 目標(biāo)對(duì)象的實(shí)現(xiàn)接口梧乘, 代理類本身)
重寫invoke方法
包裝目標(biāo)對(duì)象并返回對(duì)應(yīng)的代理類對(duì)象
調(diào)用
利用接口實(shí)例化目標(biāo)對(duì)象
實(shí)例化代理工廠
新建學(xué)生代理 方法入?yún)槟繕?biāo)對(duì)象
在invoke方法中可以在method.invoke中織入對(duì)應(yīng)的邏輯實(shí)現(xiàn)AOP
動(dòng)態(tài):利用CGLib實(shí)現(xiàn)AOP功能
CGLib代理工廠中實(shí)現(xiàn)MethodInterception接口
- 在創(chuàng)建對(duì)象方法當(dāng)中引入enhancer
- 設(shè)置enhancer的父級(jí)class為目標(biāo)對(duì)象
- 設(shè)置回調(diào) 入?yún)楫?dāng)前對(duì)象
- 返回enhancer.create
- 重寫intercept方法
- 實(shí)例化object對(duì)象
在intercept方法中織入對(duì)應(yīng)的邏輯實(shí)現(xiàn)AOP
調(diào)用
通過強(qiáng)轉(zhuǎn)直接實(shí)例化CGLib代理工廠中創(chuàng)建的對(duì)象
直接利用aspect注解
在conf-aspect.xml配置注解對(duì)象