1.使用@enableaspectjautoproxy啟用aop
2.建立abstractautoproxycreator
使用@enableaspectjautoproxy
後, 可以看到會@import(aspectjautoproxyregistrar.class)
aspectjautoproxyregistrar將名為「org.springframework.aop.config.internalautoproxycreator
」的annotationawareaspectjautoproxycreator 註冊進容器,該proxycreator是abstractadvisorautoproxycreator的子類。
初始化spring容器的時候會在refresh()
->registerbeanpostprocessors()
遍歷實現ordered介面的__beanpostprocessors__的時候getbean(aspectjawareadvisorautoproxycreator)
. 此處成功建立了aspectjawareadvisorautoproxycreator
。該proxycreator 是乙個abstractautoproxycreator的子類,是beanpostprocessor的實現. 會在initializebean的時候被觸發,用於!建立**物件。
3.建立advistor(切面)到快取
4.生成**物件
當使用了@aspect攔截後
5.呼叫advice鏈
當**物件呼叫方法的時候, **物件執行intercept,通過listchain = this.advised.getinterceptorsanddynamicinterceptionadvice(method, targetclass)
得到advice鏈,該chain 是乙個倒序的chain.將chain傳入new cglibmethodinvocation(proxy, target, method, args, targetclass, chain, methodproxy).proceed();
建立乙個invocation去執行,這裡是用到責任鏈模式,順序如下:
1-4步的方法執行順序:
Spring AOP原理之原始碼學習
1.springaop應用 增強乙個方法 增強乙個類 物件 切點和連線點和通知所在的類稱為乙個切面 aspect 2.原始碼 所以 物件在初始化的時候已經 放到了map中呼叫了refresh preinstantiatesingletons getbean beanname dogetbean ge...
Spring AOP 原始碼詳解
spring aop 是 spring 核心功能之一,日常的工作少不了和 aop 打交道 是時候有必要去了解 spring 對 aop 的封裝和其背後的原理,這樣子我們才能寫出更加高質量的 及產生 bug 的原因 什麼是 aop aop 的相關一些概念 spring aop 的使用方式 spring...
spring aop原始碼分析
面試中經常被問到什麼是aop,其實aop是一種技術實現,或者說是一種實現標準,實現aop的技術有多種,但是通常所說的aop,大家會不自覺的想到spring aop,因為spring aop被問了很多次。本文想從原始碼的執行流程上來簡單說說aop的實現原理。aop的底層技術其實就是大家熟知的 spri...