2011-08-26 25 views
2

一個帶註釋的參數的方法,我想匹配這樣的方法:如何配合在AspectJ中

@Foo 
public void boo(@Baz Bar bar) { ... } 

基本上:

  • 該方法具有@Foo註釋(我匹配與execution(@Foo * *(..)) && @annotation(foo)),
  • 可以具有參數可變的量,
  • 和它們中的一個應具有@Baz註釋,
  • 我需要進一步處理該註釋參數(bar)。

如果一個方法有@foo註解,但是缺少@Baz註釋,我想盡早得到一個錯誤,如果可能的話編織時,而不是在運行時。

我該怎麼做?

回答

2
public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..)); 

declare error :execution(@Foo * *(..))&&!annArg() :"error"; 

不幸的是,不可能通過args(..,arg,..)來獲取匹配的參數。但是,您可以使用thisJoinPoint.getArgs()和反射API來獲取帶註釋的參數。或者如果你知道參數的位置,你可以使用類似args(..,arg)的東西;