AopContext.currentProxy();为什么能获取到代理对象

简介: AopContext.currentProxy();为什么能获取到代理对象

在同一个类中,非事务方法A调用事务方法B,事务失效,得采用AopContext.currentProxy().xx()来进行调用,事务才能生效。


B方法被A调用,对B方法的切入失效,但加上AopContext.currentProxy()创建了代理类,在代理类中调用该方法前后进行切入。对于B方法proxyA中调用只能对A进行增强,A里面调用B使用的是对象.B(),而不是$proxy.B(),所以对B的切入无效。


AopContext.currentProxy()使用了ThreadLocal保存了代理对象,因此

AopContext.currentProxy().B()就能解决。


在不同类中,非事务方法A调用事务方法B,事务生效。

在同一个类中,事务方法A调用非事务方法B,事务具有传播性,事务生效

在不同类中,事务方法A调用非事务方法B,事务生效。

Spring中创建动态代理有两种方式,即jdk动态代理、cglib动态代理。

jdk动态代理创建时JdkDynamicAopProxy中的invoke方法中存入的

 

cglib动态代理CglibAopProxy在创建代理时也存入了

相关文章
|
7月前
|
Java
反射&代理
反射&代理
61 0
|
Web App开发 数据安全/隐私保护
如何在AdsPower中设置易路代理YiLuProxy?
如何在AdsPower中设置易路代理YiLuProxy?
218 0
|
3月前
|
设计模式 缓存 JavaScript
什么是代理对象
【9月更文挑战第3天】什么是代理对象
127 0
|
6月前
|
JavaScript API
怎么进行代理
怎么进行代理
66 1
|
安全 大数据
什么是高匿代理,与普匿和透明代理的区别是什么?它有什么作用?
什么是高匿代理,与普匿和透明代理的区别是什么?它有什么作用?
|
Cloud Native Java Go
gPRC代理方式详细介绍
gPRC代理方式详细介绍
132 0
|
设计模式 Java
反射和代理
反射和代理
76 0
代理
概念 代理:代替处理,又称委托模式。 实现:为目标对象提供(包装)了一个代理,这个代理可以控制对目标对象的访问。外界不直接访问目标对象,而是访问代理对象,再由代理对象调用目标对象。
561 0
|
Kubernetes Docker 容器
代理配置
代理配置
192 0