动态代理的注意点(一)

12 篇文章 0 订阅
2 篇文章 0 订阅

估计很多人都使用过动态代理,特别是处理事务时,动态代理是一个很好的解决方案,但是其中有一些注意点我们还是需要了解一下;

举例

伪代码如下:

UserService {
    void a(){
        this.b();
    }

    void b(){

    }
}

OrderService {
    UserService userService;
    void a(){
        userService.b();
    }
}

加入UserService的方法a、方法b和OrderService的方法a都进行了动态代理,那么现在调用UserService的方法a和调用OrderService的方法a分别会走几层代理?为什么?

其实这个问题的答案UserService#a之后走一层方法a的代理,方法b的代理不会走;而OrderService#a则会走两层代理,方法a和方法b的代理都会走。因为UserService中的a方法中调用方法b使用的是this来调用,这时候的this指代的就是UserService对象自己,而OrderService中的a方法中调用方法b使用的是userService对象来调用,这时候的userService注入的其实是动态代理后的对象,所以会走b的代理。

其实这个问题和Spring事务管理的事务传播机制息息相关,大家可以思考一下……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值