问题描述写了个切面,对方法上含有指定注解的方法进行拦截。运行时发现,如果一个子类A继承了抽象父类B,并实现了父类的抽象方法,在子类的重写方法上加上指定注解,却发现这个方法在调用时不能被拦截。哪位能给解释下,以及解决办法?相关代码// 注解public @interface Profiling {
}// 父类public class B { public abstract void foo();
}// 子类public class A extent B { // 加上了Profiling注解,想要此方法被拦截,但实际未被拦截
@Profiling
@Override
public void foo() { // do something
}
}// 定义的切面public class Aspect { @Pointcut("@annotation(com.base.Profiling)") private void pointCut(){
} @Around("pointCut()") public Object around(ProceedingJoinPoint pjp) { // do something
}
}
1 回答
倚天杖
TA贡献1828条经验 获得超3个赞
不清楚题主的配置文件是什么。题主可以这么去检查:
1、Aspect
类需要被Spring管理,并且要被标记为@org.aspectj.lang.annotation.Aspect
。
2、A
类需要被Spring管理。
3、@Around
注解的处理逻辑应该是:
@Around("pointCut()") public void around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("do something before the real invocation...."); pjp.proceed();//真正的调用业务方法,就是foo(); System.out.println("do something after the real invocation...."); }
添加回答
举报
0/150
提交
取消