要有aop功能必須要加@enableaspectjautoproxy註解@enableaspectjautoproxy註解會給容器中新增乙個後置處理器,這個後置處理器會在bean的建立前後被呼叫,bean建立完成後,會檢查這個bean是否需要增強,如果需要增強,就會通過動態**技術生成乙個**物件,**物件就含有通知方法就是增強的方法,以後起作用的就是這個**物件。
這些增強的方法會 封裝成乙個***鏈,aop功能的實現就是通過***鏈實現的,這些***是按順序被呼叫的,在乙個***內部會呼叫另乙個***,等另乙個***執行完 在執行自己的方法,最後乙個***會呼叫前置通知然後呼叫目標方法,在呼叫目標方法,在呼叫後置通知,如果正常就呼叫返回通知,有異常就呼叫異常通知
總結:1)、 @enableaspectjautoproxy 開啟aop功能
2)、 @enableaspectjautoproxy 會給容器中註冊乙個元件 annotationawareaspectjautoproxycreator
3)、annotationawareaspectjautoproxycreator是乙個後置處理器;
4)、容器的建立流程:
1)、registerbeanpostprocessors()註冊後置處理器;建立annotationawareaspectjautoproxycreator物件
2)、finishbeanfactoryinitialization()初始化剩下的單例項bean
1)、建立業務邏輯元件和切面元件
2)、annotationawareaspectjautoproxycreator攔截元件的建立過程
3)、元件建立完之後,判斷元件是否需要增強
是:切面的通知方法,包裝成增強器(advisor);給業務邏輯元件建立乙個**物件(cglib);
5)、執行目標方法:
1)、**物件執行目標方法
2)、cglibaopproxy.intercept();
1)、得到目標方法的***鏈(增強器包裝成***methodinterceptor)
2)、利用***的鏈式機制,依次進入每乙個***進行執行;
3)、效果:
正常執行:前置通知-》目標方法-》後置通知-》返回通知
出現異常:前置通知-》目標方法-》後置通知-》異常通知
Spring註解驅動開發 AOP面向切面
aop 在程式執行期間,動態的將某段 切入到指定方法執行時的指定時機執行,其實就是動態 spring提供了對aop很好的支援,使用時需要匯入spring aspects包。業務邏輯類 要求在業務方法執行時列印日誌 public class mathcalculator 切面類 類上需要註解 aspe...
Spring註解驅動開發(三) AOP使用
本篇主要講解spring aop的使用。如需檢視實現原理,移步 spring原始碼解析 三 aop實現原理 dependency groupid org.springframework groupid artifactid spring aspects artifactid version 4.3....
Spring註解驅動 註解實現AOP切面程式設計
需求 在指定包下的所有類中的有方法都加上前置和後置通知。1.aop類,使用的註解 aspect表示當前的類為aop類 aspect public class logaop after execution service.public void doafter bean public logaop l...