[英]How can I exclude getters and setters in aspectJ?
我的Maven 項目中有一個aspectJ 類,它幫助我顯示項目中任何被調用方法的開始和結束。 我現在嘗試排除所有 getter 和 setter。 我嘗試修改此注釋: @Around("execution(public * *(..))
by @Around("execution(public * *(..) && !within(* set*(..))")
但它並沒有錯,它在控制台中給了我:
[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.7:compile (default) on project spb-lceb: AJC compiler errors:
[ERROR] error at @Around("execution(public * *(..) && !within(* set*(..))")
Syntax error on token "execution(public * *(..) && !within(* set*(..))", ")" expected
任何的想法
接受的解決方案顯然是錯誤的,因為within(* set*(..))
甚至不會編譯。 此切入點類型需要類型簽名,而不是方法簽名。 此外,它只嘗試處理 setter,而不是 OP 要求的 getter。
正確的解決辦法是:
@Around("execution(public * *(..)) && !execution(* set*(..)) && !execution(* get*(..))")
通過接受錯誤的解決方案,OP 甚至激怒了其他人在這里嘗試相同的方法。 這就是為什么在這么長時間后我寫這個答案的原因。
我認為這只是一個錯字,因為在&&
運算符之前的執行調用結束時您有一個 mising )
:
@Around("execution(public * *(..) && !within(* set*(..))")
應該:
@Around("execution(public * *(..)) && !within(* set*(..))")
試試吧,應該可以解決問題。
對於以Get開頭的方法,最好的解決方案是重命名它們以擺脫這種沖突。
//package name to exclude
@Pointcut("execution(* com.aasif.dao.*.*(..))")
private void forDaoPackage() {}
//getter
@Pointcut("execution(* com.aasif.dao.*.get*(..))")
private void getter() {}
//setter
@Pointcut("execution(* com.aasif.dao.*.set*(..))")
private void setter() {}
//excluding getter and setter method
@Pointcut("forDaoPackage() && !(getter() || setter())")
private void forNoGetterSetter() {}
//applying to advice
@Before("forNoGetterSetter()")
public void excludingGetter() {
System.out.println("performCloud()");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.