3.2 Spring AOP的設計與實現

JVM的動態代理特性

在Spring AOP實現中,使用的核心技術是動態代理,這其實是JDK的一個特性(JDK1.3以上的版本有這個特性)。經過JDK的動態代理特性,能夠爲任意Java對象建立代理對象,對於具體使用來講,這個特性是經過Java Reflection API來完成的。在瞭解具體的Java Reflection以前,先複習下Proxy模式,其靜態類圖以下:post

上圖中,RealSubject是真正的目標對象,在代理模式的設計中,會設計一個接口和目標對象一致的代理對象ProxySubject,二者都實現了接口Subject的request方法。在這種狀況下,client對目標對象的request的調用就會被代理對象攔截,在調用目標對象的request方法的先後會調用代理對象中的一系列處理,好比上圖的preOperation和postOperation,這一系列的處理對目標對象來講是透明的,目標對象對這些處理絕不知情。spa

JDK已經實現了這個Proxy模式,能夠直接使用這個特性。具體來看,能夠在Java的reflection包中看到Proxy對象,這個對象生成後須要爲它設計一個回調方法,這個回調方法起到的做用就是在其中加入了代理須要額外處理的動做,參考preOperation()和postOperation()方法。設計

Spring AOP的應用場景

Spring AOP爲IoC的使用提供了不少便利:代理

一方面,應用能夠直接使用AOP的功能,設計應用的橫切關注點,把跨越應用多個模塊的功能抽象出來,編制到模塊中,好比經過AOP實現應用程序中的日誌功能;日誌

另外一方面,在Spring內部,一些支持模塊也是經過AOP來實現的,好比事務處理。對象

相關文章
相關標籤/搜索