簡體   English   中英

如何在aspectJ中排除getter和setter?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM