一、這裡先列舉一些aop基本概念,後面提到再作相應解釋
1)目標物件 target
2)**物件 proxy
3)切點 pointcut
4)增強 advice
5)切面 advisor
6)織入器:將增強邏輯嵌入到目標物件的切點位置上從而生成**物件的工具,相當於連線目標物件和**物件的橋梁
二、說到框架體系,就要從底層慢慢往上做抽象,那就先從設計模式和實現機制講起:
spring aop的設計模式是**模式
1.靜態**:在編譯時就給每個需要增強的目標物件編寫出對應的**物件,缺點是如果增強的邏輯都一樣,那麼每個**物件之間就有很多重複性的**。
2.動態**:在系統執行時才給目標物件建立**物件,克服了靜態**的缺點,增強的邏輯**只需寫一遍。
三、spring aop採用動態**模式,實現機制有兩種:
1)基於介面的jdk自帶的動態**元件,這裡主要包括invocationhandler和proxy兩個類
2)基於類的cglib類庫的動態位元組碼增強技術,通過建立目標類的子類,擴充套件生成**物件,這裡主要包括methodinterceptor(net.sf.cglib.proxy.methodinterceptor)和enhancer兩個類
四、spring aop織入器
spring aop中的最基本的織入器是proxyfactory,其內部就是使用jdk或cglib動
態**技術將增強織入到目標類中:cglib2aopproxy和jdkdynamicaopproxy。
五、spring aop增強的五種型別:
1)前置增強:beforeadvice
2)後置增強:afterreturningadvice
3)環繞增強:methodinterceptor(org.aopalliance.intercept.methodinterceptor)
4)異常丟擲增強:throwsadvice
5)引介增強:introductioninterceptor,這個比較特殊,表示在目標類中新增一些新的方法和屬性
六、切點 pointcut
假設我們希望有選擇地織入目標類的某些特定方法,就需要使用切點進行這些特定
方法的定位。spring aop通過pointcut這個介面描述切點,
pointcut由classfilter和
methodmatcher構成,通過
classfilter定位到目標類,通過methodmatcher定位到目標
類的特定方法。
七、切面advisor
切面advisor由增強advice和切點pointcut構成,由於增強的不同又分為
pointcutadvisor和introductionadvisor。前者最常見的實現是
defaultpointcutadvisor,
可由任意的pointcut和advice構成,唯一不支援的是引介
增強,所以有了後者。前面
說了這個
引介增強introductioninterceptor很特殊,這裡
展開講講:
通過引介增強,可以為目標類新增乙個介面的實現,即原來目標類未實現某個介面
,通過引介增強可以為目標類建立實現某介面的**。spring定義了引介增強介面
introduction
interceptor
,但沒有定義任何方法。spring為該介面提供了
delegatingintroductioninterceptor實現類,一般情況下,通過繼承該類來定義自己的
引介增強類。
而引介切面最常見的實現是default
introductionadvisor。
八、自動建立**
spring aop建立在spring ioc基礎上,所以能夠享受到很多spring容器帶來的便利
功能,其中之一就是spring提供自動**機制,讓容器自動生成**,把開發人員從繁
瑣的配置工作解放出來。在內部,spring使用beanpostprocessor自動完成這項工作,
其中最常見最基本的實現是defaultadvisorautoproxycreator。
Spring AOP 核心流程小結
注 initializebean 位於 createbeaninstance 建立 bean 例項和 populatebean 依賴注入 之後 建立封裝了配置資訊的 aopconfig 切點表示式 切面類 前置 後置 環繞通知 將 aopconfig 再封裝成 advisedsupport 包括了上...
Vue框架體系
屬性修飾符 其他關鍵點 一次性插值,當資料內容改變時,插入的資料不會改變。v once 這個將不會改變 span 內容轉為html using mustaches p using v html directive v html rawhtml span p 根據條件切換顯示狀態 v show ok ...
集合框架的體系
最基本的集合介面。遍歷collection集合 呼叫iterator 的方法,返回迭代子,可由迭代子直接訪問每個元素,如下 iterator it collection.iterator 獲得乙個迭代子 while it.hasnext 繼承collection的介面主要有 list,set。繼承自...