AspectJ:如何替换现有注释

时间:2010-11-05 13:22:03

标签: java junit aop aspectj

使用AspectJ,如何替换现有注释?

我有以下代码

declare @method : @Test * *(..) : @Test(timeout=10);

在每个测试方法上生成以下错误:

... already has an annotation of type org.junit.Test, cannot add a second
instance [Xlint:elementAlreadyAnnotated]

当然,错误是有道理的,但语法是什么,“从拥有它的所有方法中删除@Test注释。然后将其替换为@Test(timeout=10)

2 个答案:

答案 0 :(得分:4)

我是AspectJ项目负责人。在https://bugs.eclipse.org/bugs/show_bug.cgi?id=313026下,我们正在研究如何使用声明注释:

  • 扩充现有注释(向已存在的注释添加值)
  • 替换他们
  • 定义优先级(如果你声明替换那里有什么?)

我们还在寻找一种删除注释的形式:

声明@remove_from_method:int mymethod():@ ToBeRemoved;

但你还不能做到......

答案 1 :(得分:1)

我怀疑你能用AspectJ做到这一点。至少我在AspectJ in Action的当前版本中找不到任何相关信息。

可以做的是在测试注释旁边注入你自己的自定义注释,并编写一个自定义的JUnit Runner类(绑定@RunWith注释,你可以再次注入您的方面),使您的自定义注释优先于@Test注释。