Spring AOP嵌套调用

来源:互联网 发布:软件模块设计总结 编辑:程序博客网 时间:2024/06/05 20:06

在做日志的时候,我通常是用aop的方式,以降低耦合性,保证业务代码的干净。

之前一直使用的挺好。今天开发反映在嵌套调用的时候日志没有起作用。

场景如下:

A调用B.a方法,B.a上的拦截是有用的。B.a里调用了B.b,在B.b上也同样有拦截注解,但是没有起作用。

其实这个没起作用是很正常的,因为Spring aop是基于bean的,而B.a里调用B.b,其中这个B已经不是spring中的代理产生的B,而是this,也就是解除代理壳子的B的真身,那么当然aop是不会起作用的。


要解决这个问题,最简单的方法是把自身注入到自身,用注入的这个自身去调用本方法。

或者你也可以不用spring aop而是用aspectj weaving,倒是可以测底的解决该问题。


其实到这里,也只是为了解决问题而解决问题。但是请细想下,为什么会出现这种情况?是不是设计不合理。

加业务日志的方法为什么不是一个完整而独立的业务,

加业务日志的方法为什么会被另一个业务方法调用,既然会调用,说明这个是一个公共的逻辑,是组成多个共同业务的公共逻辑,为什么不提出来?


0 0