spring aop知識

什麼是AOP
AOP: (Aspect Oriented Programming) 面向切面編程。是目前軟件開發中的一個熱點,也是spring框架中容。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。主要的功能是:日誌記錄,性能統計,安全控制,事務處理,異常處理等等。




AOP的術語
1.通知(Advice)也叫增強
通俗的說就是你想要的功能,也就是上面說的 安全,事物,日誌等。你給先定義好把,然後在想用的地方用一下。
增強是織入到目標類連接點上的一段程序代碼,在Spring中,增強除用於描述一段程序代碼外,還擁有另一個和連接點相關的信息,這便是執行點的方位。結合執行點方位信息和切點信息,我們就可以找到特定的連接點。
2.連接點(JoinPoint)
通俗來說就是spring允許你使用通知的地方,那可真就多了,基本每個方法的前,後(兩者都有也行),或拋出異常時都可以是連接點,spring只支持方法連接點.其他如aspectJ還可以讓你在構造器或屬性注入時都行,不過那不是咱關注的,只要記住,和方法有關的前前後後(拋出異常),都是連接點。
程序執行的某個特定位置:如類開始初始化前、類初始化後、類某個方法調用前、調用後、方法拋出異常後。一個類或一段程序代碼擁有一些具有邊界性質的特定點,這些點中的特定點就稱爲“連接點”。Spring僅支持方法的連接點,即僅能在方法調用前、方法調用後、方法拋出異常時以及方法調用前後這些程序執行點織入增強。連接點由兩個信息確定:第一是用方法表示的程序執行點;第二是用相對點表示的方位。
3.切入點(Pointcut)
通俗的來說:上面說的連接點的基礎上,來定義切入點,你的一個類裏,有15個方法,那就有幾十個連接點了對把,但是你並不想在所有方法附近都使用通知(使用叫織入,看下面的詳細),你只想讓其中的幾個,在調用這幾個方法之前,之後或者拋出異常時乾點什麼,那麼就用切點來定義這幾個方法,讓切點來篩選連接點,選中那幾個你想要的方法。
每個程序類都擁有多個連接點,如一個擁有兩個方法的類,這兩個方法都是連接點,即連接點是程序類中客觀存在的事物。AOP通過“切點”定位特定的連接點。連接點相當於數據庫中的記錄,而切點相當於查詢條件。切點和連接點不是一對一的關係,一個切點可以匹配多個連接點。在Spring中,切點通過org.springframework.aop.Pointcut接口進行描述,它使用類和方法作爲連接點的查詢條件,Spring AOP的規則解析引擎負責切點所設定的查詢條件,找到對應的連接點。其實確切地說,不能稱之爲查詢連接點,因爲連接點是方法執行前、執行後等包括方位信息的具體程序執行點,而切點只定位到某個方法上,所以如果希望定位到具體連接點上,還需要提供方位信息。
4.切面(Aspect)
通俗的說切面是通知和切入點的結合。通知說明了幹什麼和什麼時候幹(什麼時候通過方法名中的before,after,around等就能知道),而切入點說明了在哪幹(指定到底是哪個方法),這就是一個完整的切面定義。
切面由切入點和增強(引介)組成,它既包括了橫切邏輯的定義,也包括了連接點的定義,Spring AOP就是負責實施切面的框架,它將切面所定義的橫切邏輯織入到切面所指定的連接點中。
切面(Aspect):  橫切關注點(跨越應用程序多個模塊的功能)被模塊化的特殊對象
5.引入(introduction)也叫引介
通俗的來說就是允許我們向現有的類添加新方法屬性。
引介是一種特殊的增強,它爲類添加一些屬性和方法。這樣,即使一個業務類原本沒有實現某個接口,通過AOP的引介功能,我們可以動態地爲該業務類添加接口的實現邏輯,讓業務類成爲這個接口的實現類。
6.目標對象(target)
通俗來說:引入中所提到的目標類,也就是要被通知的對象,也就是真正的業務邏輯,他可以在毫不知情的情況下,被咱們織入切面。而自己專注於業務本身的邏輯。
增強邏輯的織入目標類。如果沒有AOP,目標業務類需要自己實現所有邏輯,而在AOP的幫助下,目標業務類只實現那些非橫切邏輯的程序邏輯,而性能監視和事務管理等這些橫切邏輯則可以使用AOP動態織入到特定的連接點上。
7.代理(proxy)
一個類被AOP織入增強後,就產出了一個結果類,它是融合了原類和增強邏輯的代理類。根據不同的代理方式,代理類既可能是和原類具有相同接口的類,也可能就是原類的子類,所以我們可以採用調用原類相同的方式調用代理類。
8.織入(weaving)
通俗的來說:把切面應用到目標對象來創建新的代理對象的過程。有3種方式,spring採用的是運行時。
織入是將增強添加對目標類具體連接點上的過程。AOP像一臺織布機,將目標類、增強或引介通過AOP這臺織布機天衣無縫地編織到一起。根據不同的實現技術,AOP有三種織入的方式:
    a、編譯期織入,這要求使用特殊的Java編譯器。
    b、類裝載期織入,這要求使用特殊的類裝載器。
    c、動態代理織入,在運行期爲目標類添加增強生成子類的方式。
    Spring採用動態代理織入,而AspectJ採用編譯期織入和類裝載期織入。
發佈了45 篇原創文章 · 獲贊 29 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章