我讀過Spring AOP不能攔截私有和受保護的方法,但它是以一種奇怪的方式攔截它們爲什麼是這樣?爲什麼Spring AOP在某些情況下攔截受保護的方法?
我有這些功能,我想攔截:
public String getName(String string) {
System.out.println("Name : " + name + string);
return name;
}
protected String getNamesprotected(String string) {
System.out.println("Name : " + name + string);
return name;
}
這是我的@Aspect
代碼:
@Aspect
public class Logging {
@Before("execution(* com.tutorialspoint.Student.*Name*(..))")
public void beforeAdvice(JoinPoint joinPoint){
System.out.println("Going to setup student profile."+joinPoint.getSignature().toString());
}
}
當執行該代碼雙方的getName和getNamesprotected被截獲,但是當我執行該代碼:
@Aspect
public class Logging {
@Before("execution(* com.tutorialspoint.Student.getNamesprotected(..))")
public void beforeAdvice1(JoinPoint joinPoint){
System.out.println("Going to setup student profile."+joinPoint.getSignature().toString());
}
}
然後沒有任何東西被攔截。我也嘗試用*getNamesprotected*
替換getNamesprotected
,但仍不攔截。它只在*Name*
在那裏時截獲。
任何人都可以解釋爲什麼會發生這種情況嗎?
除非您使用AspectJ而不是Spring AOP,否則您所描述的內容難以置信。我只是覺得你犯了一個錯誤。 Spring AOP永遠不會攔截受保護的方法。如果您仍然認爲它確實存在,請在GitHub上使用[SSCCE](http://sscce.org/)進行證明。然後,我願意看看。 – kriegaex
你可以舉一個例子SSCCE。我是新來的,所以不知道如何創建一個。 –
你是認真的嗎?你甚至可以關注鏈接並閱讀SSCCE的含義嗎?如果你仍然不明白它的含義以及如何用你自己的代碼創建一個代碼,那麼你要麼完全缺乏作爲軟件開發人員的天賦,而應該嘗試找到一份新工作或者你只是懶惰。我選擇給你懷疑的好處,並拒絕認爲你是一個糟糕的開發者。因此我認爲懶惰是你的問題。所以,請儘可能尊重您的想法,您是否打算開啓您的大腦並嘗試幫助其他人幫助您回答您的問題? – kriegaex