動態(tài)代理總結(jié)

1.從JDK或者CGLIB動態(tài)代理到Spring的動態(tài)代理,大家會發(fā)現(xiàn)他們的共同點都是編程式的去生成代理對象,通常我們的spring項目中不會直接去使用他們,因為這樣使用他們太麻煩,我們希望能直接從Spring容器種拿到代理對象(bean),所以Spring提供了AOP的功能,聲明式的指定被代理類和切點,從而通過Spring容器幫你生成代理對象(bean)。

2.Spring的動態(tài)代理整合了CGLIB和JDK動態(tài)代理,提供了Adivce的概念,一般支持四種advice - beforeAdvice,afterReturningAdvice,afterThrowingAdvice,around。AspectJ多一種advice就是afterAdvice,就是最后finally里面執(zhí)行。

3.其實Spring的AOP有兩種實現(xiàn)

第1種就是Spring的動態(tài)代理(再底層也就是JDK和CGLIB)
第2種就是AspectJ - 也是一個項目

第1種都是要通過Spring的一些擴(kuò)展功能比如FactoryBean,BeanPostProcessor,把代理對象交給Spring管理。

第2種是Spring支持了AspectJ的注解,Spring容器啟動的時候會去解析AspectJ的注解例如@Aspect,@Jointpoint。。生成對應(yīng)的Adivice? bean (增強(qiáng)Bean)

但是有個開關(guān)@EnableAspectJAutoProxy

4.AspectJ是在編譯期增強(qiáng),意思就是在編譯的時候生成代理類
? ?JDK和CGLIB是在運(yùn)行期增強(qiáng),意思就是運(yùn)行時生成代理類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容