3.5 ProxyFactoryBean實現AOP的過程總結

回顧下經過ProxyFactoryBean實現AOP的整個過程:編程

        首先須要對目標對象以及攔截器進行正確配置,以便AopProxy代理對象順利產生;這些配置能夠經過配置ProxyFactoryBean的屬性來完成,或者經過編程式地使用ProxyFactory來實現。兩種方式只是在表面配置的方式上不一樣,內在的AOP實現原理是同樣的。設計

        在生成AopProxy代理對象的時候,Spring AOP設計了專門的AopProxyFactory做爲AopProxy代理對象的生產工廠,由它來負責生產相應的AopProxy代理對象,默認使用的生產工廠是DefaultAopProxyFactory對象,這個對象定義了AopProxy代理對象的生成策略,從而決定使用哪一種AopProxy代理對象的生成技術(JDK的Proxy類、CGLIB)。而最終的AopProxy代理對象的產生則交給JdkDynamicAopProxy和Cglib2AopProxy這兩個具體的工廠來完成。代理

        在獲得AopProxy代理對象後,在代理的接口方法被調用執行時,並非直接運行目標對象的調用方法,而是先觸發對這些方法調用進行攔截。攔截過程在JDK的Proxy代理對象中,是經過invoke方法完成;而在CGLIB的Proxy代理對象中,攔截是由設置好的回調callback方法來完成。這些攔截爲對目標調用的功能加強提供了工做空間。對象

        在ProxyFactoryBean的回調中,首先會根據配置來對攔截器是否與當前的調用方法相匹配進行判斷。若是匹配,那麼相應的攔截器就開始發揮做用。這個過程是一個遍歷的過程,它會遍歷在Proxy代理對象中設置的攔截器鏈中的全部攔截器,直到全部攔截器的調用完成爲止。等到全部攔截器的調用都完成了,纔是對目標對象的方法調用。接口

        在攔截器的調用過程當中,實際上已經封裝了Spring對AOP的實現,好比對各類通知器的加強織入功能。在AOP應用中接觸到的advice通知是不能直接對目標對象完成加強的,這裏Spring AOP對應於每種advice通知都設計了對應的AdviceAdapter通知適配器,這些適配器實現了advice通知對目標對象的不一樣加強方式。在AopProxy代理對象的回調方法中,須要有一個註冊機制,完成註冊後攔截器鏈中的攔截器纔是AdviceAdapter適配過的攔截器,才能發揮做用。原理

相關文章
相關標籤/搜索