创建Java注释包装器
我目前正在使用一个由第三方库提供的注释,我想知道是否有办法在它周围创建另一个“包装器注释”,这样我就不需要所有参数 例如,我可以使用如下库注释:创建Java注释包装器,java,annotations,wrapper,Java,Annotations,Wrapper,我目前正在使用一个由第三方库提供的注释,我想知道是否有办法在它周围创建另一个“包装器注释”,这样我就不需要所有参数 例如,我可以使用如下库注释: @LibraryAnnotation(Parameter1, Parameter2, Parameter3) @Test @SqlGroup( { @Sql( executionPhase = BEFORE_TEST_METHOD, config = @SqlConfig(tra
@LibraryAnnotation(Parameter1, Parameter2, Parameter3)
@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() {}
但是在我的例子中,Parameter2和Parameter3总是相同的,所以我想创建一个只接受Parameter1的注释
@MyAnnotation(Parameter1)
但是将使用所有参数调用另一个注释,类似于为第三方方法创建包装的方式。注释非常有限。不幸的是,我看不出有什么办法,但我可能是错的。据我所知,目前有两种方法可以实现这一点:
- 使用Daileon工具()——因为它更像是一个实验性工具,所以它的可用性有点麻烦
- 使用面向方面的编程和类型间声明注入新注释,例如:
declare@type:@MyAnnotation包。*:@LibraryAnnotation(..)代码>
但是,这两个选项都有很大的局限性。您可以使用基本注释对注释进行注释,如本示例所示:
@Target(value = {ElementType.TYPE})
@Page(method3="someValue")
public @interface Move {
String method1();
String method2();
}
@Target(value = {ElementType.ANNOTATION_TYPE})
public @interface Page{
String method3();
}
我最初的测试是这样的:
@LibraryAnnotation(Parameter1, Parameter2, Parameter3)
@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(){}
把你的答案记下来,因为我还没有找到答案。我认为这是不可能的。@user1751547为什么会被否决?这就是方法…请解释更多。在您的示例中,@Page注释是@LibraryAnnotation吗?仅当@LibraryAnnotation具有
@Target(value={ElementType.ANNOTATION\u TYPE})
时,此功能才/始终有效吗?