美文网首页
spring aop 同类中调用失败分析以及解决

spring aop 同类中调用失败分析以及解决

作者: 一驴绝尘 | 来源:发表于2019-01-11 08:20 被阅读0次

        这是由于 Spring AOP (包括动态代理和 CGLIB 的 AOP) 的限制导致的. Spring AOP 并不是扩展了一个类(目标对象), 而是使用了一个代理对象来包装目标对象, 并拦截目标对象的方法调用.

        这样的实现带来的影响是: 在目标对象中调用自己类内部实现的方法时, 这些调用并不会转发到代理对象中, 甚至代理对象都不知道有此调用的存在.

        当调用 helloWithoutAop() 方法时, 先进入到此代理对象的同名方法中, 然后在代理对象中执行 AOP 逻辑(因为 helloWithoutAop() 并没有注入 AOP 横切逻辑, 因此调用它不会有额外的事情发生), 当代理对象中执行完毕横切逻辑后, 才将调用请求转发到目标对象的 hello() 方法上. 因此当代码执行到 hello() 方法内部时, 此时的 this 其实就不是代理对象了, 而是目标对象, 因此再调用 timerService.helloWithoutAop(),自然就没有 AOP 效果了.

        代码示例以及解决办法见 示例代码

    相关文章

      网友评论

          本文标题:spring aop 同类中调用失败分析以及解决

          本文链接:https://www.haomeiwen.com/subject/xmjtdqtx.html