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在創建代理時也存入了
總結
以上是生活随笔為你收集整理的AopContext.currentProxy();为什么能获取到代理对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Programming Assignme
- 下一篇: 利用cookies跳过登陆验证码