91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Spring基于ProxyFactoryBean創建AOP代理

發布時間:2021-08-26 13:53:31 來源:億速云 閱讀:146 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關怎么使用Spring基于ProxyFactoryBean創建AOP代理,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作為你的業務對象(你也應該這么做!),你會想使用 Spring AOP FactoryBean的一種。

工廠 bean 引入了中間層,讓它創建不同類型的對象。

在Spring創建 AOP 代理的基本方式是使用 org.springframework.aop.framework.ProxyFactoryBean。這可以完全控制pointcuts、使用的任何通知和他們的順序。但若不需要這樣的控制,也有更簡單的選擇。

1 基礎

ProxyFactoryBean,類似其他 Spring 的FactoryBean實現,引入了中間層。

若你定義了名為 foo 的ProxyFactoryBean,則引用 foo 的對象不會看到ProxyFactoryBean實例本身,而是在ProxyFactoryBean中實現的 getObject()創建的對象。該方法創建了一個包裝目標對象的 AOP 代理。

使用ProxyFactoryBean或其他 IoC-aware 類創建 AOP 代理的最大好處之一是advices和pointcuts也可以由 IoC 管理。這是一個強大的功能,使某些方法很難用AOP 實現的開啟了新途徑。例如,advice本身可能引用應用對象(不僅是目標對象,該對象應在任何 AOP 框架中都可用),從而受益于DI提供的所有可插拔性。

2 JavaBean屬性

與大多數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值。

3 JDK和CGLIB代理

ProxyFactoryBean如何選擇為特定目標對象(將代理)創建基于 JDK 的代理或基于 CGLIB 的代理。

ProxyFactoryBean在創建基于 JDK 或 CGLIB 的代理方面的行為在Spring的 1.2.x 版本和 2.0
版本之間發生了變化。ProxyFactoryBean現在在自動檢測接口方面表現出與TransactionProxyFactoryBean類類似的語義。

如果要代理的目標對象類別(以下簡稱目標類)不實現任何接口,則創建基于 CGLIB 的代理。這是最簡單的方案,因為 JDK 代理是基于接口的,沒有接口意味著 JDK 代理甚至是不可能的。您可以插入目標豆,并通過設置攔截器命名屬性來指定攔截器列表。請注意,即使代理工廠豆的代理目標類屬性被設置為虛假,也創建基于 CGLIB 的代理。(這樣做是沒有意義的,最好從豆的定義中刪除,因為它充其量是多余的,而且,在最壞的情況下是令人困惑的。

關于“怎么使用Spring基于ProxyFactoryBean創建AOP代理”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德化县| 天等县| 佛冈县| 虹口区| 鱼台县| 黔江区| 龙井市| 东台市| 大同县| 屏山县| 唐海县| 新郑市| 麟游县| 瓦房店市| 城固县| 辽宁省| 湘西| 霸州市| 海城市| 西平县| 双柏县| 白银市| 和硕县| 乌拉特后旗| 江华| 阿勒泰市| 凤台县| 青浦区| 克什克腾旗| 宁晋县| 定西市| 连平县| 和平县| 浦东新区| 包头市| 青海省| 宁德市| 南城县| 喀喇沁旗| 金塔县| 全椒县|