欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理

 更新時(shí)間:2021年08月26日 11:39:56   作者:JavaEdge.  
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作為你的業(yè)務(wù)對(duì)象(你也應(yīng)該這么做?。?,你會(huì)想使用 Spring AOP FactoryBean的一種。

工廠 bean 引入了中間層,讓它創(chuàng)建不同類型的對(duì)象。

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

1 基礎(chǔ)

ProxyFactoryBean,類似其他 Spring 的FactoryBean實(shí)現(xiàn),引入了中間層。

若你定義了名為 foo 的ProxyFactoryBean,則引用 foo 的對(duì)象不會(huì)看到ProxyFactoryBean實(shí)例本身,而是在ProxyFactoryBean中實(shí)現(xiàn)的 getObject()創(chuàng)建的對(duì)象。該方法創(chuàng)建了一個(gè)包裝目標(biāo)對(duì)象的 AOP 代理。

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

2 JavaBean屬性

與大多數(shù)FactoryBean實(shí)現(xiàn)類似, ProxyFactoryBean類本身就是一個(gè)JavaBean。

其屬性用于:

  • 指定要代理的目標(biāo)
  • 指定是否使用 CGLIB

一些關(guān)鍵屬性是從 org.springframework.aop.framework.ProxyConfig (Spring所有 Aop 代理工廠的父類) 繼承的。這些關(guān)鍵屬性包括:

  • proxyTargetClass

如果要代理目標(biāo)類,而不是目標(biāo)類的接口,則為 true。如果此屬性值設(shè)置為true,則創(chuàng)建 CGLIB 代理

  • optimize

控制是否將主動(dòng)優(yōu)化應(yīng)用于通過 CGLIB 創(chuàng)建的代理。除非你完全了解相關(guān)的 AOP 代理如何處理優(yōu)化,否則您不應(yīng)輕率地使用此設(shè)置。僅用于 CGLIB 代理,對(duì) JDK 動(dòng)態(tài)代理無(wú)影響。

  • frozen

如果代理配置被凍結(jié),則不再允許更改配置。這既是一種輕微的優(yōu)化,也是在不希望調(diào)用者在創(chuàng)建代理后(通過建議的接口)操縱代理時(shí),這些情況是有用的。默認(rèn)值false,即允許更改(比如添加額外advice)。

  • exposeProxy

確定當(dāng)前代理是否應(yīng)在ThreadLocal暴露,以便目標(biāo)可以訪問該代理。如果目標(biāo)需要獲取代理并將暴露的 Proxy 屬性設(shè)置為true,則目標(biāo)可以使用 AopContext.當(dāng)前普羅西 () 方法。

ProxyFactoryBean其他屬性包括:

  • proxyInterfaces

字符串接口名稱的數(shù)組。若不提供此,則使用目標(biāo)類的 CGLIB 代理

  • interceptorNames

要應(yīng)用的Advisor、攔截器或其他建議名稱的字符串?dāng)?shù)組。順序非常重要,首先先到先得。也就是說,列表中的第一個(gè)攔截器是能夠攔截調(diào)用的第一個(gè)攔截器。

這些名稱是當(dāng)前工廠中的bean名稱,包括來自祖先工廠的bean名稱。你不能在這里使用bean引用, 因?yàn)檫@樣做會(huì)導(dǎo)致

ProxyFactoryBean忽略了推薦的單例設(shè)置。

可以用 * 附加攔截器名稱。這樣做會(huì)導(dǎo)致應(yīng)用所有advisor beans與名稱,開始與*應(yīng)用前的部分。

  • singleton

工廠是否應(yīng)該返回單例的對(duì)象,無(wú)論getObject()調(diào)用頻率如何,幾個(gè)FactoryBean實(shí)現(xiàn)都提供這樣的方法。默認(rèn)值為true。如果你想使用有狀態(tài)的advice,使用prototype 類型的advices以及false的singleton值。

3 JDK和CGLIB代理

ProxyFactoryBean如何選擇為特定目標(biāo)對(duì)象(將代理)創(chuàng)建基于 JDK 的代理或基于 CGLIB 的代理。

ProxyFactoryBean在創(chuàng)建基于 JDK 或 CGLIB 的代理方面的行為在Spring的 1.2.x 版本和 2.0
版本之間發(fā)生了變化。ProxyFactoryBean現(xiàn)在在自動(dòng)檢測(cè)接口方面表現(xiàn)出與TransactionProxyFactoryBean類類似的語(yǔ)義。

如果要代理的目標(biāo)對(duì)象類別(以下簡(jiǎn)稱目標(biāo)類)不實(shí)現(xiàn)任何接口,則創(chuàng)建基于 CGLIB 的代理。這是最簡(jiǎn)單的方案,因?yàn)?JDK 代理是基于接口的,沒有接口意味著 JDK 代理甚至是不可能的。您可以插入目標(biāo)豆,并通過設(shè)置攔截器命名屬性來指定攔截器列表。請(qǐng)注意,即使代理工廠豆的代理目標(biāo)類屬性被設(shè)置為虛假,也創(chuàng)建基于 CGLIB 的代理。(這樣做是沒有意義的,最好從豆的定義中刪除,因?yàn)樗淦淞渴嵌嘤嗟模?,在最壞的情況下是令人困惑的。

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot+Querydsl?框架實(shí)現(xiàn)復(fù)雜查詢解析

    SpringBoot+Querydsl?框架實(shí)現(xiàn)復(fù)雜查詢解析

    本篇主要將介紹的是利用spring query dsl框架實(shí)現(xiàn)的服務(wù)端查詢解析和實(shí)現(xiàn)介紹,對(duì)SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧
    2022-05-05
  • 解析Spring Mvc Long類型精度丟失問題

    解析Spring Mvc Long類型精度丟失問題

    在平時(shí)開發(fā)過程中,經(jīng)常會(huì)使用long類型作為id的類型,但是在使用過程中會(huì)導(dǎo)致long類型數(shù)據(jù)轉(zhuǎn)換為number類型時(shí)的后兩位變?yōu)?,今天小編給大家分享Spring Mvc Long類型精度丟失問題,需要的朋友參考下吧
    2021-06-06
  • 基于maven搭建一個(gè)ssm的web項(xiàng)目的詳細(xì)圖文教程

    基于maven搭建一個(gè)ssm的web項(xiàng)目的詳細(xì)圖文教程

    這篇文章主要介紹了基于maven搭建一個(gè)ssm的web項(xiàng)目的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java String類常量池分析及

    java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹

    這篇文章主要介紹了java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • spring mvc4的日期/數(shù)字格式化、枚舉轉(zhuǎn)換示例

    spring mvc4的日期/數(shù)字格式化、枚舉轉(zhuǎn)換示例

    本篇文章主要介紹了spring mvc4的日期/數(shù)字格式化、枚舉轉(zhuǎn)換示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Java中Objects.equals踩坑記錄

    Java中Objects.equals踩坑記錄

    最近在工作中發(fā)現(xiàn)一個(gè)問題,覺著還是挺有必要記錄下的,這篇文章主要給大家介紹了關(guān)于Java中Objects.equals踩坑的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • SpringCloud服務(wù)注冊(cè)和發(fā)現(xiàn)組件Eureka

    SpringCloud服務(wù)注冊(cè)和發(fā)現(xiàn)組件Eureka

    對(duì)于微服務(wù)的治理而言,其核心就是服務(wù)的注冊(cè)和發(fā)現(xiàn)。在SpringCloud 中提供了多種服務(wù)注冊(cè)與發(fā)現(xiàn)組件,官方推薦使用Eureka。本篇文章,我們來講解springcloud的服務(wù)注冊(cè)和發(fā)現(xiàn)組件,感興趣的可以了解一下
    2021-05-05
  • javaweb購(gòu)物車案列學(xué)習(xí)開發(fā)

    javaweb購(gòu)物車案列學(xué)習(xí)開發(fā)

    這篇文章主要為大家詳細(xì)介紹了javaweb購(gòu)物車案列學(xué)習(xí)開發(fā)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • springBoot系列常用注解(小結(jié))

    springBoot系列常用注解(小結(jié))

    這篇文章主要介紹了springBoot系列常用注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java中的快捷鍵小結(jié)

    java中的快捷鍵小結(jié)

    以下是myeclipse中的所有快捷鍵列表
    2013-03-03

最新評(píng)論