Spring AOP專業術語解析


一、 連接點(Joinpoint)

連接點就是程序執行的某個特定的位置,如:類開始初始化前、類初始化后、類的某個方法調用前、類的某個方法調用后、方法拋出異常后等。
Spring 只支持類的方法前、后、拋出異常后的連接點。

二、 切點(Pointcut)

一個項目中有很多的類,一個類有很多個連接點,當我們需要在某個方法前插入一段增強(advice)代碼時,我們就需要使用切點信息來確定,要在哪些連接點上添加增強。
那么切點是什么?
如果把連接點當做數據庫中的記錄,那么切點就是查找該記錄的查詢條件。
所以,一般我們要實現一個切點時,那么我們需要判斷哪些連接點是符合我們的條件的,如:方法名是否匹配、類是否是某個類、以及子類等。

三、增強(Advice)

增強就很好理解了,AOP(切面編程)是用來給某一類特殊的連接點,添加一些特殊的功能,那么我們添加的功能也就是增強啦~
比如:添加日志、管理事務。
不過增強不僅僅包含需要增加的功能代碼而已,它還包含了方位信息。
那什么是方位信息呢?
方位信息就是相對於方法的位置信息,如:方法前、方法后、方法環繞
為什么要方位信息呢?切點不是確定了需要增強的位置了嗎?
切點定位的是“在什么類的什么方法上”,也就是說,切點只是定位到了方法本身(也叫執行點,特殊的連接點),但是我們增強的內容是放在該方法的前面呢、后面呢?還是前后都要呢?這些切點卻沒有告訴我們,那么我們該如何確定具體位置呢?
所以,我們才需要用到方位信息,進一步的定位到具體的增強代碼放置的位置。

咦?增強即包含了【功能】又包含了【方位】,那我是不是不用切點就可以匹配哪些方法,並添加功能了呢?
恩,確實如此,因為通過方位信息,雖然只是簡單的描述了【功能】需要放在方法前、后、還是前后都要等信息,但是我們還是可以通過方位定位到位置。只不過,是匹配到所有類的所有方法!因為方位只是說明在方法前還是方法后,並沒有要求是哪些類?哪些方法? — So,我們可以直接使用增強來生成一個切面,而不需要切點,但這並不怎么推薦,因為它是匹配所有方法的。所以,我們才需要用切點來進一步確認位置。

四、目標對象(Target)

目標對象就是我們需要對它進行增強的業務類~
如果沒有AOP,那么該業務類就得自己實現需要的功能。

五、引介

引介是一種特殊的增強。
它為類添加一些屬性和方法。這樣,即使一個業務類原本沒有實現某個接口,通過AOP的引介功能,我們可以動態的為該業務類添加接口的實現邏輯,讓業務類成為這個接口的實現類。

六、織入

織入就是將增強添加到目標類具體連接點上的過程。

  1. 編譯期織入,這要求使用特殊java編譯器
  2. 類裝載期織入,這要求使用特殊的類裝載器
  3. 動態代理織入,在運行期為目標類添加增強生成子類的方式
    Spring采用的是動態代理織入,而AspectJ采用編譯期織入和類裝載期織入。
七、代理

一個類被AOP織入后生成出了一個結果類,它是融合了原類和增強邏輯的代理類。

八、切面

切面由切點和增強(或引介)組成,或者只由增強(或引介)實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM