仅子类方法的Spring AOP切入点表达式
我有一个场景需要截取一些子类方法,但我找不到合适的切入点表达式来截取 我有一个面向客户端的界面仅子类方法的Spring AOP切入点表达式,spring,spring-aop,pointcut,Spring,Spring Aop,Pointcut,我有一个场景需要截取一些子类方法,但我找不到合适的切入点表达式来截取 我有一个面向客户端的界面InfoService,它有一个方法getClientDetails package sample; public interface InfoService { InfoVO getClientDetails(int id); } 实现类有一些嵌套方法,如get*Info() 当用户调用getClientDetails方法时,我想截取get*Info()方法。我可以很容易地截获getCli
InfoService
,它有一个方法getClientDetails
package sample;
public interface InfoService {
InfoVO getClientDetails(int id);
}
实现类有一些嵌套方法,如get*Info()
当用户调用getClientDetails
方法时,我想截取get*Info()
方法。我可以很容易地截获getClientDetails
,但似乎没有截获子类方法。我甚至试着用自定义注释来注释那些info方法,但没有成功。到目前为止,我提出了以下方面
<aop:aspect ref="infoAspect">
<aop:pointcut expression="execution(* sample.InfoService+.*Info(..))"
id="infoMethods" />
<aop:around method="aroundAdviceForinfoMethods" pointcut-ref="infoMethods" />
</aop:aspect>
将
设置为true或false也没有帮助。
我知道AOP不能拦截私有子类方法,但这些是公共方法。甚至有可能做到这一点吗?非常感谢您的帮助
PS:所示示例用于演示。实际的实现是巨大的,因此将这些内部方法移动到另一个bean并调用将是不可行的。这是一个经典的实现,已经在这里被问了几十次了。我想您还没有读过Spring手册中关于SpringAOP是基于代理的以及基于这个原因SpringAspects的信息。如果您真的需要AOP来处理自调用的方法(如果必要的话,甚至是私有的方法),那么就告别Spring AOP,向full(加载时编织)问好。也已经阅读了这些文章。当时大多数人都只有几岁了,所以我希望春天在这几年里可能会有一些魔力;)在这种情况下,他们可能会更新手册,因为这将是一个重大的(破坏兼容性的)变化
<aop:aspect ref="infoAspect">
<aop:pointcut expression="execution(* sample.InfoService+.*Info(..))"
id="infoMethods" />
<aop:around method="aroundAdviceForinfoMethods" pointcut-ref="infoMethods" />
</aop:aspect>