13

我目前正在使用由 3rd 方库提供的注释,我想知道是否有一种方法可以围绕它创建另一个“包装器注释”,这样我就不必需要所有参数。

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

@LibraryAnnotation(Parameter1, Parameter2, Parameter3)

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

@MyAnnotation(Parameter1)

但将使用所有参数调用另一个注释,类似于您可能为第 3 方方法创建包装器的方式。

4

4 回答 4

2

注释非常有限。不幸的是,我看不到方法,但我可能错了。

于 2013-10-24T22:32:48.053 回答
0

据我所知,目前有两个选项可用于执行此操作:

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

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

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

于 2015-08-26T07:26:23.417 回答
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();
}
于 2016-10-14T20:18:13.667 回答
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(){}
于 2020-12-25T18:25:09.230 回答