aop是什麼: 傳統oop開發代碼邏輯之上而下的,這個過程當中會產生一些橫切性問題,這些問題與咱們主業務邏輯關係不大,會散落在代碼的各個地方,形成難以維護,aop思想就是把業務邏輯與橫切的問題進行分離,達到解耦的目的,提升diamante重用性和開發效率;
應用場景:
日誌記錄,權限驗證,事務管理,線程池關閉等
aop使用哪一種動態代理?
當bean的是實現中存在接口或者是Proxy的子類,---jdk動態代理;
不存在接口,spring會採用CGLIB來生成代理對象;
源碼分析:
(1):@EnableAspectJAutoProxy給容器(beanFactory)中註冊一個AnnotationAwareAspectJAutoProxyCreator對象;
(2):AnnotationAwareAspectJAutoProxyCreator是一個後置處理器,在目標對象初始化完後,利用BeanPostProcessor後置通知的機制,完成對目標對象的AOP對象建立,對象內部,是封裝JDK和CGlib兩個技術,實現動態代理對象建立的;
(3):代理對象執行目標方法,獲得目標方法的攔截器鏈,利用攔截器的鏈式機制,依次進入每個攔截器進行執行spring