SpringAOP原始碼學習總結

2022-03-06 20:24:09 字數 1528 閱讀 1443

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...