spring的aop詳解

1、aop術語java

一、鏈接點joinpoint: 程序執行的某個特定位置:如類開始初始化以前、類初始化以後、類某個方法調用前、調用後等。Spring僅支持方法的鏈接點,即僅能在方法調用前、方法調用後以及方法調用先後的這些程序執行點織入加強spring

二、切點pointcut:每一個程序類都擁有許多鏈接點,如一個擁有兩個方法的類,這兩個方法都是鏈接點,AOP經過切點定位特定鏈接點。經過數據庫查詢的概念來理解切點和鏈接點:鏈接點至關於數據庫表中的記錄,而切點至關於查詢條件。鏈接點和切點不是一一對應的關係,一個切點能夠匹配多個鏈接點。數據庫

在Spring中,切點經過org.springframework.aop.Pointcut接口進行描述,它使用類和方法做爲鏈接點的查詢條件,Spring AOP的規則解析引擎負責解析切點所設定的查詢條件,找到對應的鏈接點;其實確切的說應該是執行點而非鏈接點,由於鏈接點是方法執行前、執行後等包括方位信息的具體程序執行點,而切點只定位到某個方法上,因此若是但願定位到具體鏈接點上,還須要提供方位信息框架

三、加強advice:加強是織入到目標類鏈接點上的一段程序代碼(比如AOP以黑客的身份往業務類中裝入木馬),加強還擁有一個和鏈接點相關的信息,這即是執行點的方位。結合執行點方位信息和切點信息,咱們就能夠找到特定的鏈接點了,因此Spring提供的加強接口都是帶方位名的:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。(有些將Advice翻譯爲通知,但通知就是把某個消息傳達給被通知者,並無爲被通知者作任何事情,而Spring的Advice必須嵌入到某個類的鏈接點上,並完成了一段附加的應用邏輯;)翻譯

四、引介introduction:引介是一種特殊的加強,它爲類添加一些屬性和方法,這樣即便一個業務類本來沒有實現某個接口,經過AOP的引介功能,咱們能夠動態的爲該業務類添加接口的實現邏輯,讓這個業務類成爲這個接口的實現類。代理

五、織入weaving:對象

織入是將加強添加到目標類具體鏈接點上的過程,AOP就像一臺織布機,將目標類、加強或者引介編織到一塊兒,AOP有三種織入的方式:接口

       a.編譯期間織入,這要求使用特殊的java編譯器;開發

       b.類裝載期織入,這要求使用特殊的類裝載器;編譯器

       c.動態代理織入,在運行期爲目標類添加加強生成子類的方式。

 Spring採用動態代理織入,而AspectJ採用編譯器織入和類裝載期織入。

六、代理proxy:  一個類被AOP織入加強後,就產生出了一個結果類,它是融合了原類和加強邏輯的代理類

七、切面aspect:

切面由切點和加強組成,它既包括了橫切邏輯的定義,也包括了鏈接點的定義,Spring AOP就是負責實施切面的框架,它將切面所定義的橫切邏輯織入到切面所指定的鏈接點中。

     總結:AOP的工做重點就是如何將加強應用於目標對象的鏈接點上,這裏首先包括兩個工做:第一,如何經過切點和加強定位到鏈接點;第二,如何在加強中編寫切面的代碼。

 

2、aop介紹

Spring AOP使用了兩種代理機制:一種是基於JDK的動態代理,一種是基於CGLib的動態代理;java提供了動態代理技術,容許開發者在運行期間動態的建立接口的代理實例,JDK的動態代理主要涉及到java.lang.reflect包中的兩個類:Proxy和InvocationHandler,其中InvocationHandler是一個接口,能夠經過實現該接口定義橫切邏輯,並經過反射機制調用目標類的代碼,動態的將橫切邏輯和業務邏輯編織在一塊兒。

使用JDK代理模式有一個限制,即它只能爲接口建立代理實例

相關文章
相關標籤/搜索