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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

@EnableAspectAutoJAutoProxy_exposeProxy属性

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @EnableAspectAutoJAutoProxy_exposeProxy属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、@EnableAspectAutoJAutoProxy開啟AOP功能

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({AspectJAutoProxyRegistrar.class}) public @interface EnableAspectJAutoProxy {boolean proxyTargetClass() default false;boolean exposeProxy() default false; }
  • 屬性解釋
    • proxyTargetClass:表示動態(tài)代理實現(xiàn)方式,如果值設置true,表示需要代理類都基于CGLIB來實現(xiàn);默認情況下值是設置成false表示如果原類如果定義了接口則通過JDK.Proxy實現(xiàn)否則基于CGLIB來實現(xiàn)。
    • exposeProxy: exposeProxy=true Spring會把當前的代理對象存放在ThreadLocal中

    二、關(guān)于exposeProxy

  • 先看一個例子
    • 接口:
    public interface IUserService {boolean showName();void showAge(); }
    • 實現(xiàn)接口
    @Service public class UserService implements IUserService {@Overridepublic boolean showName() {System.out.println("UserService.showName");showAge();return false;}@Overridepublic void showAge() {System.out.println("UserService.showAge");} }
    • 切面
    @Component @Aspect public class MyAspect {@Before("execution(* com.aop.UserService.*(..))")@AfterReturningpublic void myBefore(JoinPoint joinPoint) {System.out.println("before invoke "+joinPoint.getSignature().getName()); }
    • Config
    @Configuration @ComponentScan("com.aop") @EnableAspectJAutoProxy public class AppConfig { }
    • Test
    public class TestAOP {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);IUserService userService = (IUserService) ctx.getBean("userService");userService.showName();} }
    • 結(jié)果
    before invoke showName UserService.showName UserService.showAge
    • 思考 :為何不會輸出before invoke showAge
    • 原因就是:
    public boolean showName() {System.out.println("UserService.showName");//本質(zhì)是this.showAge(),在這里是UserService的原始對象調(diào)用,不是由spring加強后的Proxy對象來調(diào)用的showAge();return false;}
  • 解決方法:核心就是拿到Spring加強后的代理對象,再調(diào)用。
    • 讓UserService感知到ApplicationContextAware,使其有從beanFactory獲取到Proxy對象的能力。注意不能使用new AnnotationConfigApplicationContext(),這樣Spring會導致有兩個容器
    @Service public class UserService implements IUserService , ApplicationContextAware {private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}public boolean showName(){System.out.println("UserService.showName");IUserService userService = (IUserService) applicationContext.getBean("userService");userService.showAge();return true;}@Overridepublic void showAge() {System.out.println("UserService.showAge");} } ----------------------------------------------------- 結(jié)果: before invoke showName UserService.showName before invoke showAge UserService.showAge
    • 在ThreadLocal中獲取到Proxy對象,這是Spring提供的能力,但是該功能的開啟就需要設置 exposeProxy=true :把當前的代理對象存放在ThreadLocal中
    @Service public class UserService implements IUserService {@Overridepublic boolean showName() {System.out.println("UserService.showName");//TheadLocal中 獲得代理對象 并進行調(diào)用IUserService userService = (IUserService) AopContext.currentProxy();userService.showAge();return true;}@Overridepublic void showAge() {System.out.println("UserService.showAge");} }

    如果沒設置:@EnableAspectJAutoProxy(exposeProxy = true),報以下錯誤:

    • 源碼:

    在Spring.JdkDynamicAopProxy.invoke()方法中,可以看到以下:

    if (this.advised.exposeProxy) {oldProxy = AopContext.setCurrentProxy(proxy);setProxyContext = true;}

    三、Spring都不推崇以上方法,Spring官方文檔建議的是,不要在有代理的方法中互相調(diào)用

    總結(jié)

    以上是生活随笔為你收集整理的@EnableAspectAutoJAutoProxy_exposeProxy属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 又大又粗弄得我出好多水 | 啪啪av | 国产原创在线视频 | 国产伦精品一区二区三区视频女 | 国产不卡在线观看视频 | 久久久久久久久电影 | 538国产精品视频一区二区 | 日韩黄色一级 | 国产精品wwww | 中文字幕免费观看 | 在线观看福利网站 | 国产成人无码精品久久久电影 | 亚洲精品一二三四区 | 国产精品扒开腿做爽爽 | 亚洲综合精品视频 | 91在线观看免费 | 亚洲五十路 | 国产在线拍揄自揄拍无码视频 | 亚洲一区二区三 | 欧美特黄一级视频 | 亚洲666| 黄色网免费看 | 天天天天天天天天干 | av老司机在线观看 | 全球av在线 | 成人性生交大片免费看中文 | 四川话毛片少妇免费看 | 91插插视频 | 午夜激情免费 | a级片免费视频 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 啪啪一级片 | 99热青青草 | 哈利波特3在线观看免费版英文版 | 中国大陆一级毛片 | 91九色丨porny丨国产jk | 亚洲国产一区二区三区四区 | 成人av网址在线观看 | 国产精品毛片一区二区 | 天天爱天天做 | 高潮videossex高潮 | 亚洲精品1 | 免费在线观看a级片 | 一本毛片| 最新天堂在线视频 | 饥渴的少妇和男按摩师 | 色窝网| 日本久久成人 | 中文字幕在线字幕中文 | 浪漫樱花在线观看高清动漫 | 国产免费片 | 污的视频在线观看 | 国产欧美日韩精品一区 | 人妻丰满熟妇av无码区hd | 欧美成人高清在线 | 亚洲精品www久久久 一级aaa毛片 | 久久久久久久久黄色 | 日韩激情四射 | 人人干在线 | 在线免费看av片 | 麻豆视频黄色 | 欧美视频第一区 | 欧美激情国产日韩精品一区18 | 一区视频免费观看 | 黄色一级大片在线观看 | 久久久蜜桃一区二区人 | 色窝窝无码一区二区三区成人网站 | 久草资源| 亚洲视频色图 | 久久亚洲综合色 | 嫩草影院一区二区三区 | 中国黄色大片 | 成人欧美在线 | 男生和女生靠逼视频 | 国产一二三四五区 | 片黄在线观看 | 天天射天天干 | 强伦轩人妻一区二区电影 | 午夜福利啪啪片 | 日日干日日草 | 天天天天天天操 | 9色视频 | 夜夜久久久 | av777777| 在线电影一区 | 四虎精品在线播放 | av先锋影音 | 欧美亚洲色综久久精品国产 | 中文字幕日韩高清 | 久久伊人操 | 欧美亚洲一区二区在线观看 | 91免费高清视频 | 免费的av片| 国产又黄又粗的视频 | 日韩第1页| 6090伦理 | 日韩av高清在线观看 | 67194成人在线 | 日b视频免费 |