本文主要是介绍关于spring 类内部方法调用aop不生效原因,以及jdk,cglib 动态代理原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
引入:spring的aop
深入实验(发现类内部方法调用的代理可以生效)
自己实现动态代理(cglib)
spring的动态代理实现
自己实现spring aop的效果
关于上述自己实现aop与spring aop的区别
自己实现的aop:
spring 实现的aop:
模仿spring aop的效果, 代码示例:
spring 什么时候为类创建代理
spring bean 内部方法调用代理失效的解决办法
cglib动态代理中invokeSuper和invoke的区别
cglib 与jdk 代理的区别(生成的类字节码分析)
cglib的原理:
jdk动态代理:
其他
如何获取spring bean的原始对象
其他参考:
引入:spring的aop
我们知道,在spring 的一个A类bean中方法fa调用A中的方法fb,即使fb上有则@Transactional,或者fb 被aop拦截了,此时fb上的所有代理织入操作都不会生效。而如果在另一个类B中调用A中的fb,则代理织入是生效的。
但是经过下面实验发现,spring完全可以实现类内部方法调用 代理增强依然生效。但为何spring 不这样做呢?网上没有找到原因,以下为自己的理解原因:Spring aop应该是故意这样做的 内部调用是调用自己,不然就没办法通过代理bean使用原始对象方法了,对一个方法调用,有时需要被拦截(这是大部分的需求),有时候确实不想。如果spring aop不这样做,那使用原始对象就要手动new一个对象。因该是为了满足不想被代理增强的特殊需求。。。
这篇关于关于spring 类内部方法调用aop不生效原因,以及jdk,cglib 动态代理原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!