Spring AOP 核心流程小結

2021-10-20 19:29:00 字數 1387 閱讀 4748

注:initializebean() 位於 createbeaninstance() 建立 bean 例項和 populatebean() 依賴注入 之後

建立封裝了配置資訊的 aopconfig(切點表示式、切面類、前置/後置/環繞通知)

將 aopconfig 再封裝成 advisedsupport(包括了上面的配置檔案資訊,目標類,被**物件)

在呼叫 advisedsupport#settargetclass() 儲存目標類資訊時,會呼叫自己的 parse() 方法

根據切點表示式,提取並構造目標類特徵表示式

獲取切面類的所有方法(logaspect)並遍歷,將通知方法儲存

獲取目標類所有方法並遍歷,尋找符合切點表示式的切入點方法,按照 befor/after/throw 的順序(從上面儲存的通知方法中取出相應方法),為該切入點構造***鏈listadvices將所有符合的方法及他們的***鏈,儲存到 advisedsupport 的map> methodcache

上面建立的***例項是 methodbeforeadviceinterceptor/afterreturningadviceinterceptor 等,它們繼承了 abstractaspectadvice 抽象類,實現了 methodinterceptor 介面,表示有兩種不同作用

還是在 initializebean() 方法中,根據提取的目標類特徵,判斷該目標類是否符合;如果符合,就通過 jdk 動態**,為該目標類建立乙個新的**物件,然後放入快取容器(singletonobjects)

注意:建立**物件時,如果沒有目標類沒有介面就得使用 cglib **了

2)對於被**物件,當有請求到來,要執行某個某個方法時,就會走到動態** jdkdynamicaopproxy 的 invoke() 方法

通過 advisedsupport 獲取該方法的執行器鏈listinterceptorsanddynamicmethodmatchers

通過***鏈、**物件例項等,構造 methodinvocation (***鏈執行器)。methodinvocation 實現了 myjoinpoint 介面,封裝了***鏈執行邏輯 proceed()

呼叫 proceed() 方法,它會不斷按順序執行 methodbeforeadviceinterceptor/afterreturningadviceinterceptor 等封裝的方法,並將結果返回

注意:proceed() 方法並不是通過遍歷 list 來執行所有通知方法的,而是通過遞迴(自頂向下)

Spring IOC DI 核心流程小結

下面進入正文 首先,來看這行 做了什麼 new 2 refresh 建立並初始 ioc 容器大致邏輯如下 載入 根據配置資訊,將掃瞄到的所有類載入成 beandefinition ps 關鍵資訊 beanname beanclass islazyinit issingon 註冊 將list根據註冊到...

Spring AOP框架體系小結

一 這裡先列舉一些aop基本概念,後面提到再作相應解釋 1 目標物件 target 2 物件 proxy 3 切點 pointcut 4 增強 advice 5 切面 advisor 6 織入器 將增強邏輯嵌入到目標物件的切點位置上從而生成 物件的工具,相當於連線目標物件和 物件的橋梁 二 說到框架...

linux 核心 核心啟動流程

cs是 段暫存器,ip是指令指標暫存器 相當於偏移位址 儲存的是 指令的位址。cs ip共同作用生成了 位址,具體演算法是cs左移4位 ip即是 位址。例如cs 0xf000,ip 0xfff0,則 位址為0xffff0.global globl 命令 global symbol global 使得...