Spring AOP

忘塵天外天發表於2017-09-27

  Spring AOP是繼Spring IoC之後的Spring框架 的又一大特性,它也是Spring框架的核心內容。AOP是一種思想,所有符合AOP思想的技術,都可以看做是AOP 的實現。AOP 是建立在Java代理機制之上,S騙人能夠框架已經基本實心了AOP思想。在眾多的AOP實現技術當中,Spring AOP做得最好,也是最成熟的。

  Spring AOP 會實現AOP聯盟(Alliance)指定的介面規範。Spring AOP的介面都實現了AOP聯盟定製標準化介面,這就意味著Spring AOP已經走向了標準化,它將發展的更快。AOP聯盟由許多團體組成,這些團體致力於各個Java AOP子專案的開發,它們與Spring 有相同的信念:AOP使開發複雜的企業級應用變得簡單,沒落更清晰。同時它們也在很保守的地方為AOP 制定標準化的統一介面,使得不同的AOP 技術之間相互相容。

  Spring AOP的實現是基於Java的代理機制,從JDK 1.3開始就支援代理機制,但是效能成為一個很大問題,為了解決JDK代理效能問題,出現了CGLIB代理機制,它可以生成位元組碼,所以它的效能會高於JDK代理。Spring支持者兩種代理方式。但是隨著JVM(Java虛擬機器)效能的不斷提高,者兩種代理效能的差距會越來越小。先了解Spring AOP的一些術語,它們是構成Spring AOP的基本組成部分。

  切面(Aspect):是物件操作過程中的截面,想象一個平行四邊形攔截了程式流程,Spring形象地把它叫做切面,所謂“面向切面程式設計”正式指的這個。實際上,“切面”是一段程式程式碼,這段程式碼將植入到程式流中。

  連線點(Join Point):物件操作過程中的某個階段點,在程式流程上的任意一點,都可以是連線點。它實際上是物件的一個操作,例如,物件呼叫某個方法,讀寫物件的例項或是某個方法丟擲了異常。

  切入點(Pointcut):切入點是連線點的集合,切面與程式流程的“交叉點”便是程式的切入點。確切的說,它是“切面注入”到程式中的位置。換句話說,“切面”是通過切入點被注入的。在程式中可以有很多個切入點。

  通知(Advice):通知是某個切入點被橫切後,所採取的處理邏輯。也就是說,在“切入點”處攔截程式後,通過通知來執行切面。

  目標物件(Target):所有被通知的物件(也可以理解為被代理的物件)都是目標物件,目標物件被AOP鎖關注,它的屬性的改變會被關注,它行為的呼叫也會被關注,它的方法傳參的變化仍然會被關注。AOP會注意目標物件的變動,隨時準備向目標物件注入切面。

  織入(Weaving):織入是將切面功能應用到目標物件的過程。由代理工廠建立一個代理物件,這個代理可以為目標物件執行切面功能。AOP的織入方式有3種:編譯時期(Compile time)織入、類載入時期(Classload time)織入、執行時(Runting)織入。Spring AOP一般多見於執行時織入。

  引入(Introduction):對一個已經編譯完類(class),在執行時期,動態的項這個類中載入屬性和方法。