您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么使用Spring基于ProxyFactoryBean創建AOP代理,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作為你的業務對象(你也應該這么做!),你會想使用 Spring AOP FactoryBean的一種。
工廠 bean 引入了中間層,讓它創建不同類型的對象。
在Spring創建 AOP 代理的基本方式是使用 org.springframework.aop.framework.ProxyFactoryBean。這可以完全控制pointcuts、使用的任何通知和他們的順序。但若不需要這樣的控制,也有更簡單的選擇。
ProxyFactoryBean,類似其他 Spring 的FactoryBean實現,引入了中間層。
若你定義了名為 foo 的ProxyFactoryBean,則引用 foo 的對象不會看到ProxyFactoryBean實例本身,而是在ProxyFactoryBean中實現的 getObject()創建的對象。該方法創建了一個包裝目標對象的 AOP 代理。
使用ProxyFactoryBean或其他 IoC-aware 類創建 AOP 代理的最大好處之一是advices和pointcuts也可以由 IoC 管理。這是一個強大的功能,使某些方法很難用AOP 實現的開啟了新途徑。例如,advice本身可能引用應用對象(不僅是目標對象,該對象應在任何 AOP 框架中都可用),從而受益于DI提供的所有可插拔性。
與大多數FactoryBean實現類似, ProxyFactoryBean
類本身就是一個JavaBean。
其屬性用于:
指定要代理的目標
指定是否使用 CGLIB
一些關鍵屬性是從 org.springframework.aop.framework.ProxyConfig
(Spring所有 Aop 代理工廠的父類) 繼承的。這些關鍵屬性包括:
proxyTargetClass
如果要代理目標類,而不是目標類的接口,則為 true。如果此屬性值設置為true,則創建 CGLIB 代理
optimize
控制是否將主動優化應用于通過 CGLIB 創建的代理。除非你完全了解相關的 AOP 代理如何處理優化,否則您不應輕率地使用此設置。僅用于 CGLIB 代理,對 JDK 動態代理無影響。
frozen
如果代理配置被凍結,則不再允許更改配置。這既是一種輕微的優化,也是在不希望調用者在創建代理后(通過建議的接口)操縱代理時,這些情況是有用的。默認值false,即允許更改(比如添加額外advice)。
exposeProxy
確定當前代理是否應在ThreadLocal暴露,以便目標可以訪問該代理。如果目標需要獲取代理并將暴露的 Proxy 屬性設置為true,則目標可以使用 AopContext.當前普羅西 () 方法。
ProxyFactoryBean
其他屬性包括:
proxyInterfaces
字符串接口名稱的數組。若不提供此,則使用目標類的 CGLIB 代理
interceptorNames
要應用的Advisor、攔截器或其他建議名稱的字符串數組。順序非常重要,首先先到先得。也就是說,列表中的第一個攔截器是能夠攔截調用的第一個攔截器。
這些名稱是當前工廠中的bean名稱,包括來自祖先工廠的bean名稱。你不能在這里使用bean引用, 因為這樣做會導致
ProxyFactoryBean忽略了推薦的單例設置。
可以用 * 附加攔截器名稱。這樣做會導致應用所有advisor beans與名稱,開始與*應用前的部分。
singleton
工廠是否應該返回單例的對象,無論getObject()調用頻率如何,幾個FactoryBean實現都提供這樣的方法。默認值為true。如果你想使用有狀態的advice,使用prototype 類型的advices以及false的singleton值。
ProxyFactoryBean
如何選擇為特定目標對象(將代理)創建基于 JDK 的代理或基于 CGLIB 的代理。
ProxyFactoryBean在創建基于 JDK 或 CGLIB 的代理方面的行為在Spring的 1.2.x 版本和 2.0
版本之間發生了變化。ProxyFactoryBean現在在自動檢測接口方面表現出與TransactionProxyFactoryBean類類似的語義。
如果要代理的目標對象類別(以下簡稱目標類)不實現任何接口,則創建基于 CGLIB 的代理。這是最簡單的方案,因為 JDK 代理是基于接口的,沒有接口意味著 JDK 代理甚至是不可能的。您可以插入目標豆,并通過設置攔截器命名屬性來指定攔截器列表。請注意,即使代理工廠豆的代理目標類屬性被設置為虛假,也創建基于 CGLIB 的代理。(這樣做是沒有意義的,最好從豆的定義中刪除,因為它充其量是多余的,而且,在最壞的情況下是令人困惑的。
關于“怎么使用Spring基于ProxyFactoryBean創建AOP代理”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。