动态代理的注意点(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xyc_csdn/article/details/82428088

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

举例

伪代码如下:

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事务管理的事务传播机制息息相关,大家可以思考一下……

猜你喜欢

转载自blog.csdn.net/xyc_csdn/article/details/82428088