为了账号安全,请及时绑定邮箱和手机立即绑定

Spring AOP拦截方法未生效

Spring AOP拦截方法未生效

繁星点点滴滴 2019-05-09 09:23:09
问题描述写了个切面,对方法上含有指定注解的方法进行拦截。运行时发现,如果一个子类A继承了抽象父类B,并实现了父类的抽象方法,在子类的重写方法上加上指定注解,却发现这个方法在调用时不能被拦截。哪位能给解释下,以及解决办法?相关代码//注解public@interfaceProfiling{}//父类publicclassB{publicabstractvoidfoo();}//子类publicclassAextentB{//加上了Profiling注解,想要此方法被拦截,但实际未被拦截@Profiling@Overridepublicvoidfoo(){//dosomething}}//定义的切面publicclassAspect{@Pointcut("@annotation(com.base.Profiling)")privatevoidpointCut(){}@Around("pointCut()")publicObjectaround(ProceedingJoinPointpjp){//dosomething}}
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

不清楚题主的配置文件是什么。题主可以这么去检查:1、Aspect类需要被Spring管理,并且要被标记为@org.aspectj.lang.annotation.Aspect。2、A类需要被Spring管理。3、@Around注解的处理逻辑应该是:
@Around("pointCut()")
publicvoidaround(ProceedingJoinPointpjp)throwsThrowable{
System.out.println("dosomethingbeforetherealinvocation....");
pjp.proceed();//真正的调用业务方法,就是foo();
System.out.println("dosomethingaftertherealinvocation....");
}
                            
查看完整回答
反对 回复 2019-05-09
?
长风秋雁

TA贡献1757条经验 获得超7个赞

父类重写的方法是拦截不到的,具体的你可以调试下以下这段代码。我本地没有模拟你的这种情况,但是应该也是一样的。ReflectiveMethodInvocation.proceed(),你应该是利用AspectJ的方式来做aop拦截的,所以具体调试下AspectJExpressionPointcut.matches()方法。
                            
查看完整回答
反对 回复 2019-05-09
  • 2 回答
  • 0 关注
  • 1865 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信