创建Java注释包装器

时间:2013-10-24 22:17:58

标签: java annotations wrapper

我目前正在使用第三方库提供的注释,我想知道是否有办法在它周围创建另一个“包装注释”,这样我就不需要所有参数了。

例如,我可以像这样使用库注释:

@LibraryAnnotation(Parameter1, Parameter2, Parameter3)

但在我的情况下,Parameter2和Parameter3总是一样的,所以我想创建一个只接受Parameter1的注释

@MyAnnotation(Parameter1)

但是会使用所有参数调用另一个注释,类似于为第三方方法创建包装器的方式。

4 个答案:

答案 0 :(得分:1)

注释非常有限。不幸的是,我没有办法,但我可能错了。

答案 1 :(得分:0)

据我所知,目前有两种方法可以用来做到这一点:

  • 使用Daileon工具(http://daileon.sourceforge.net/) - 因为它更像是一个实验工具,它的可用性有点麻烦
  • 使用面向方面编程和类型间声明来注入新注释,例如:

    declare @type : @MyAnnotation package.* : @LibraryAnnotation(..);

但是,这两种选择都非常有限。

答案 2 :(得分:0)

您可以使用基本注释来注释注释,如下例所示:

@Target(value = {ElementType.TYPE})
@Page(method3="someValue")
public @interface Move {
 String method1();
 String method2();
}

@Target(value = {ElementType.ANNOTATION_TYPE})
public @interface Page{
 String method3();
}

答案 3 :(得分:0)

我最初的测试是这样的:

@Test
@SqlGroup(
    {
        @Sql(
            executionPhase = BEFORE_TEST_METHOD,
            config = @SqlConfig(transactionMode = ISOLATED),
            scripts = {"classpath:test/sqls/_truncate_tables.sql"}
        ),
        @Sql(
            executionPhase = AFTER_TEST_METHOD,
            config = @SqlConfig(transactionMode = ISOLATED),
            scripts = {"classpath:test/sqls/_truncate_tables.sql"}
        )
    }
)
public void countTeams_countOnEmptyTable_returnsWithEmptyList() {}

我用这个基本注释清理了测试文件:

 @Target({ElementType.TYPE, ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Inherited
 @SqlGroup(
        {
            @Sql(
                executionPhase = BEFORE_TEST_METHOD,
                config = @SqlConfig(transactionMode = ISOLATED),
                scripts = {"classpath:test/sqls/_truncate_tables.sql"}
            ),
            @Sql(
                executionPhase = AFTER_TEST_METHOD,
                config = @SqlConfig(transactionMode = ISOLATED),
                scripts = {"classpath:test/sqls/_truncate_tables.sql"}
            )
        }
)

最后我得到了这个干净的版本:

@Test
@BaseSqlGroup
public void countTeams_countOnEmptyTable_returnsWithEmptyList(){}