Spring-aop 的實現(xiàn)原理

官網(wǎng)文檔地址:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-advice

查看5.4節(jié)。Spring 參考aspectJ 的設計方式來實現(xiàn),借助aspectj注解來處理。

關鍵點:幾個注解。

@EnableAspectJAutoProxy? 這個注解需要加在配置類上。其中干了一件事,將AnnotationAwareAspectJAutoProxyCreator 注入IOC容器,本質(zhì)是個BeanPostProcessor (這個類可以在bean 注入IOC 容器中前可以調(diào)整bean 的屬性等),通過調(diào)試代碼可以發(fā)現(xiàn),其實是在postProcessAfterInitialization方法中進行proxy 類的生成。

方法調(diào)用路線:1、wrapIfNecessary 這個是對所有bean都要進行判斷是否需要進行包裝處理的

? ? ? ? ? ? ? ? ? ? ? ? ? ?2、getAdvicesAndAdvisorsForBean 方法來處理判斷當前bean 是否需要進行aop 代理類的生成,其中通過findEligibleAdvisors??方法來判斷該類的方法是否需要被通知。

? ? ? ? ? ? ? ? ? ? ? ? ? ? 3、通過?createAopProxy 方法來獲取 一個進行動態(tài)代理的AopProxy 實現(xiàn)??梢钥吹饺绻擃愂莻€接口實現(xiàn)類或者已經(jīng)是個代理類 那么 本次proxy 就選擇JdkDynamicAopProxy 否則 就選擇ObjenesisCglibAopProxy。

? ? ? ? ? ? ? ? ? ? ? ? ? ? 4、通過動態(tài)代理將對應方法進行包裝,返回warp后的bean實例,注入IOC??梢钥吹皆瓉韓ew bean 則在該過程被放棄。

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

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

  • AOP(Aspect Orient Programming),我們一般稱為面向方面(切面)編程,作為面向?qū)ο蟮囊环N...
    Java高級新技術(shù)閱讀 130評論 0 0
  • AOP(Aspect Orient Programming),我們一般稱為面向方面(切面)編程,作為面向?qū)ο蟮囊环N...
    fad2aa506f5e閱讀 377評論 0 0
  • Spring致力于提供一種方法管理你的業(yè)務對象。在大量Java EE的應用中,隨處可見Spring。今天我將簡單的...
    JAVA架構(gòu)師的圈子閱讀 1,498評論 0 16
  • 概述 Spring是什么? Spring是一個開源框架,為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的,但是現(xiàn)在已經(jīng)不止于企...
    瑯筑閱讀 1,297評論 2 8
  • 今天一天的事情有點多,感覺到自己有些著急,再看到一個男孩磨磨唧唧的,內(nèi)心又升起怨恨。 知道自己是動了秉性,被他人擾...
    正娟_d019閱讀 144評論 0 0

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