日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在代理类中引用动态代理

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在代理类中引用动态代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Stackoverflow中有一個有趣的問題 ,關于Spring Bean如何獲??得對由Spring創建的代理的引用以處理事務,Spring AOP,緩存,異步流等。需要對代理的引用,因為如果存在對自身的調用通過代理bean,此調用將完全繞過代理。

考慮一個InventoryService接口:

public interface InventoryService{public Inventory create(Inventory inventory);public List<Inventory> list();public Inventory findByVin(String vin);public Inventory update(Inventory inventory);public boolean delete(Long id);public Inventory compositeUpdateService(String vin, String newMake); }

還請考慮該服務的默認實現,并假設最后一個方法CompositeUpdateService內部在Bean本身上調用兩個方法,如下所示:

public Inventory compositeUpdateService(String vin, String newMake) {logger.info("composite Update Service called");Inventory inventory = this.findByVin(vin);inventory.setMake(newMake);this.update(inventory);return inventory; }

如果我現在創建一個方面來建議對InventoryService的任何調用,以跟蹤每個方法調用花費的時間,Spring AOP將為InventoryService bean創建一個動態代理:

但是,對CompositeUpdateService的調用將僅在此方法的級別上記錄時間,即CompositeUpdateService內部對findByVin的調用,update繞過了代理,因此不會被跟蹤:

一個好的解決方法是使用AspectJ的全部功能– AspectJ會更改DefaultInventoryService的所有方法的字節碼,以包括對建議的調用。

我們制定的解決方法是將對代理本身的引用注入到bean中,而不是調用this.findByVin和this.update,而是調用proxy.findByVin和proxy.update!

因此,現在我們如何將對代理的引用干凈地注入到bean中-我提供的解決方案是創建一個接口,以標記對自己的代理感興趣的bean:

public interface ProxyAware<T> {void setProxy(T proxy); }

感興趣的接口及其實現如下所示:

public interface InventoryService extends ProxyAware<InventoryService>{ ... }public class DefaultInventoryService implements InventoryService{ ...private InventoryService proxy;@Overridepublic void setProxy(InventoryService proxy) {this.proxy = proxy;} }

然后定義一個BeanPostProcessor注入這個代理!

public class ProxyInjectingBeanPostProcessor implements BeanPostProcessor, Ordered {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (AopUtils.isAopProxy((bean))){try {Object target = ((Advised)bean).getTargetSource().getTarget();if (target instanceof ProxyAware){((ProxyAware) target).setProxy(bean);}} catch (Exception e) {return bean;}}return bean;}@Overridepublic int getOrder() {return Integer.MAX_VALUE;} }

不是最干凈的實現,但是可以!

參考: http : //blog.springsource.org/2012/05/23/understanding-proxy-usage-in-spring/

參考: all和雜項博客中, JCG合作伙伴 Biju Kunjummen 引用了代理課程中的動態代理 。


翻譯自: https://www.javacodegeeks.com/2012/07/reference-to-dynamic-proxy-in-proxied.html

總結

以上是生活随笔為你收集整理的在代理类中引用动态代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧洲亚洲自拍 | 超碰个人在线 | 亚欧洲精品视频 | 久久久久久久久久久99 | 亚洲另类天堂 | 亚洲自拍偷拍欧美 | 7777精品久久久久久 | 韩国美女视频在线观看18 | 欧产日产国产精品 | 丁香七月婷婷 | 91精品国产乱码久久久 | 蜜桃视频一区二区三区在线观看 | 日本视频免费在线 | 亚洲av永久一区二区三区蜜桃 | 国产又粗又大又黄 | 青青艹视频 | 国产九九精品 | 亚洲国产高清在线 | 国产无套内射普通话对白 | 国产美女网 | 在线不卡一区二区 | 国产又粗又黄又爽 | 日本成人在线不卡 | 亚洲视频第一页 | 国产精品12 | 添女人荫蒂视频 | 中文字幕一区二区三区免费 | 草草在线免费视频 | 国产一区一一区高清不卡 | 亚欧色视频 | 欧美激情久久久久久久 | 亚洲精品无 | 国产又黄又骚 | 免费看三级黄色片 | 黄色欧美视频 | 综合久久综合久久 | 天天干夜夜干 | 国产福利视频在线 | 99热99在线| 我要操婊 | 噜噜噜久久 | 无人在线观看高清视频 | 中文免费av| 久久久久久久久久一区二区三区 | 久久综合久久鬼 | 国产麻豆电影在线观看 | 好男人www| 懂色av一区二区三区蜜臀 | 欧美一区二区三区小说 | 国产av无码专区亚洲av毛网站 | 天天干天天摸 | 国产美女视频免费观看下载软件 | 国产精品一线二线三线 | 亚洲色欲色欲www | av色婷婷| 国产高清在线免费 | 国产美女视频免费观看下载软件 | 青青青在线视频免费观看 | 专干中国老太婆hd | 欧美超碰在线观看 | 青青操国产 | 蜜桃91麻豆精品一二三区 | 久久久久久久久99精品 | 人人爽人人草 | 国产成人不卡 | 午夜精品久久久久久久久久久久 | 成人夜夜| 日韩精品免费在线 | free性欧美hd精品4k | 78日本xxxxxxxxx59| 久久橹 | 闷骚老干部cao个爽 av九九九 | 精品成人久久久 | 波多野结衣av一区二区全免费观看 | 韩国电影一区 | 97人人爱 | 五月婷婷六月丁香综合 | 加勒比hezyo黑人专区 | 黄色视屏在线 | 日本电影大尺度免费观看 | 亚洲成年网站 | 91免费高清 | 欧美手机看片 | 丝瓜av| 欧美日一区二区 | av生活片 | 熟女自拍一区 | 中文字幕乱码在线人视频 | 国产电影一区在线观看 | 一区二区三区不卡在线 | 成人手机视频在线观看 | 人妻精品久久久久中文 | 无码精品视频一区二区三区 | 最近最新中文字幕 | 久久成人a毛片免费观看网站 | free黑人多人性派对hd | 久久精品aaaaaa毛片 | 亚洲乱码国产乱码精品精软件 | 日韩精品人妻一区二区三区免费 |