spring AOP

guo duogdngengegghu說明編程


    經過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持 AOP緩存


    Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中安全


什麼是AOP微信


    AOP(Aspect Orient Programming),也就是面向切面編程框架


    面向對象編程(OOP)是從靜態角度考慮程序結構, 面向切面編程(AOP)是從動態角度考慮程序運行過程 ide


AOP的做用性能


    處理一些具備橫切性質的系統性服務,如事務管理、安全檢查、緩存、對象池管理等spa


AOP的實現原理代理


    AOP 其實是由目標類的代理類實現的。AOP 代理實際上是由AOP 框架動態生成的一個對象,該對象可做爲目標對象使用對象


    AOP 代理包含了目標對象的所有方法,但AOP 代理中的方法與目標對象的方法存在差別,AOP 方法在特定切入點添加了加強處理,並回調了目標對象的方法


AOP實現


1.靜態AOP
機制:靜態織入
原理:在編譯期,切面直接以字節碼的形式編譯到目標字節碼文件中
優勢:對系統無性能影響
缺點:靈活性不夠
2.動態AOP
機制:動態代理
原理:在運行期,目標類加載後,爲接口動態生成代理類,將切面植入到代理類中
優勢:相對於靜態AOP更加靈活
缺點:切入的關注點須要實現接口。對系統有一點性能影響
表明:JDK動態代理
接口 + InvocationHandler + 目標對象 = 代理
3.動態字節碼生成
機制:在運行期,目標類加載後,動態構建字節碼文件生成目標類的子類,將切面邏輯加入到子類中
原理:沒有接口也能夠織入
優勢:擴展類的實例方法爲final時,則沒法進行織入
表明:Cglib動態代理(依賴ASM)
接口或類 + MethodInterceptor + 目標對象 = 代理
4.自定義加載器
機制:在運行期,目標加載前,將切面邏輯加到目標字節碼裏
原理:能夠對絕大部分類進行織入
優勢:代碼中若是使用了其餘類加載器,則這些類將不會被織入
表明:Javassist
5.字節碼轉換
機制:在運行期,全部類加載器加載字節碼前,前進行攔截
原理:能夠對全部類進行織入
表明:Javassit + Instrumentation


Spring對AOP的支持


    Spring 中AOP 代理由Spring 的IoC 容器負責生成、管理,其依賴關係也由IoC 容器負責管理。所以,AOP 代理能夠直接使用容器中的其餘Bean 實例做爲目標,這種關係可由IoC 容器的依賴注入提供


    Spring 默認使用Java 動態代理來建立AOP 代理, 這樣就能夠爲任何接口實例建立代理了。當須要代理的類不是代理接口的時候, Spring 自動會切換爲使用CGLIB 代理,也可
強制使用CGLIB


    AOP 編程
    定義普通業務組件
    定義切入點,一個切入點可能橫切多個業務組件
    定義加強處理,加強處理就是在AOP 框架爲普通業務組件織入的處理動做


    因此進行AOP 編程的關鍵就是定義切入點和定義加強處理。一旦定義了合適的切入點和加強處理,AOP 框架將會自動生成AOP 代理,即:代理對象的方法 = 加強處理 + 被代理對象的方法


Spring中AOP的實現


1.基於Annotation 的「零配置」方式:使用@Aspect、@Pointcut 等Annotation 來標註切入點和加強處理
a.首先啓用Spring 對@AspectJ 切面配置的支持
b.定義切面Bean
當啓動了@AspectJ 支持後,只要在Spring 容器中配置一個帶@Aspect 註釋的Bean, Spring 將會自動識別該Bean 並做爲切面處理
c.定義@Before 加強處理
d.定義@AfterReturning 加強處理
e.定義@AfterThrowing 加強處理
f.定義@After 加強處理
After 加強處理與AfterReturning 加強處理有點類似,但也有區別
AfterReturning 加強處理處理只有在目標方法成功完成後纔會被織入
After加強處理無論目標方法如何結束(保存成功完成和遇到異常停止兩種狀況),它都會被織入
g.@Around 加強處理
h.訪問目標方法的參數
i.定義切入點
所謂切入點,其實質就是爲一個切入點表達式起一個名稱,從而容許在多個加強處理中重用該名稱
一個切入點表達式
一個包含名字和任意參數的方法簽名


2.基於XML 配置文件的管理方式:使用Spring 配置文件來定義切入點和加強點


使用Spring ProxyFactoryBean建立代理


    使用 ProxyFactoryBean 來建立 AOP 代理的最重要的優勢之一是 IoC 能夠管理通知和切入點。 這是一個很是的強大的功能,可以實現其餘 AOP 框架很難實現的特定的方法。例如,一個通知自己能夠引用應用對象(除了目標對象,它在任何 AOP 框架中均可以引用應用對象),這徹底得益於依賴注入所提供的可插入性


a.ProxyFactoryBean的proxyInterfaces屬性,指明要代理的接口
b.ProxyFactoryBean的target屬性,指明要代理的目標類 ,這個目標類實現了上面proxyInterfaces屬性指定的接口
c.ProxyFactoryBean的interceptorNames屬性,指明要在代理的目標類中插入的Adivce 
d.ProxyFactoryBean還有一個proxyTargetClass屬性,若是這個屬性被設定爲「true」,說明 ProxyFactoryBean要代理的不是接口類,而是要使用CGLIB方式來進行代理,後面會詳細講解使用CGLIB方式來進行代理


IntroductionIntercepter


影響了目標物件的行爲定義,直接增 加了目標物件的職責


更多內容請關注微信公衆號:it_haha

wKioL1kyfuCiDBICAABq7LbW38I359.jpg-wh_50

相關文章
相關標籤/搜索