問題描述寫了個切面,對方法上含有指定注解的方法進行攔截。運行時發(fā)現(xiàn),如果一個子類A繼承了抽象父類B,并實現(xiàn)了父類的抽象方法,在子類的重寫方法上加上指定注解,卻發(fā)現(xiàn)這個方法在調(diào)用時不能被攔截。哪位能給解釋下,以及解決辦法?相關(guān)代碼// 注解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貢獻1802條經(jīng)驗 獲得超5個贊
不清楚題主的配置文件是什么。題主可以這么去檢查:
1、Aspect
類需要被Spring管理,并且要被標記為@org.aspectj.lang.annotation.Aspect
。
2、A
類需要被Spring管理。
3、@Around
注解的處理邏輯應(yīng)該是:
@Around("pointCut()") public void around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("do something before the real invocation...."); pjp.proceed();//真正的調(diào)用業(yè)務(wù)方法,就是foo(); System.out.println("do something after the real invocation...."); }
添加回答
舉報
0/150
提交
取消