内部类注解失效原因
spring AOP 使用Java动态代理和 cglib 代理 来创建AOP代理,没有接口的类 使用cglib 代理。关于 spring aop 的java动态代理原理,请看这片博客:利用java 的动态代理模拟spring的AOP.
熟悉一下 aop 的原理注意看m.invoke(target, args); 部分(我们讨论的问题实际上就是m中调用同类的其他方法)。
我们知道当方法被代理时,其实是 动态生成了一个代理对象,代理对象去执行 invoke方法,在调用被代理对象的方法的时候执行了一些其他的动作。
所以当在被代理对象的方法中调用被代理对象的其他方法时。其实是没有用代理调用,是用了被代理对象本身调用的。
例如买票的例子:
当我门调用buyTrainTicket(Ticket ticket)方法时,spring 的动态代理已经帮我们动态生成了一个代理的对象,暂且我就叫他 $TicketService1。
所以调用buyTrainTicket(Ticket ticket) 方法实际上是代理对象 T i c k e t S e r v i c e 1 调 用 的 。 TicketService1调用的。 T

当在Spring AOP代理对象中,被代理对象的方法内部调用其他方法时,由于直接使用`this`调用,会导致注解失效。解决方法包括通过工具类获取代理对象或者在类内部注入自身代理对象。使用@Lazy注解可以实现延迟加载,确保代理对象的存在,从而让注解生效。
最低0.47元/天 解锁文章
394

被折叠的 条评论
为什么被折叠?



