在java中创建和使用注解
我正在审查开源 Spring 项目。我对这里的注释的使用感到困惑。我想请教一下。
@Target(ElementType.METHOD)
@Retention(RUNTIME)
@Bean
public @interface Merge {
@AliasFor("targetRef")
String value() default "";
@AliasFor("value")
String targetRef() default "";
Placement placement() default Placement.APPEND;
int position() default 0;
Class<MergeBeanStatusProvider> statusProvider() default MergeBeanStatusProvider.class;
boolean early() default false;
}
此处创建了一个名为 Merge 的注释。它有不同的参数和默认值。
@Configuration
public class LocalConfiguration {
@Merge(targetRef = "mergedList", early = true)
public List<String> blLocalMerge() {
return Arrays.asList("local-config1", "local-config2");
}
}
这是@Merge我随机选择的任何类中注释的用法。
当我检查代码时,我找不到任何与 Merge 注释的实现相关的类。顺便说一下,我遇到的这个问题不仅仅是关于这个注释。我检查过的几乎所有注释都没有以任何方式实现。如果我们从这个注释开始,我想我会理解其他人。这个注解有什么作用?它给使用它的地方带来了什么样的信息。应用程序如何在没有在任何地方实现的情况下理解该注释在运行时的作用。
谢谢。
回答
注释没有实现。它们由外部类或工具根据RetentionPolicy 进行处理。在这种情况下,Merge 注释具有运行时保留,因此一旦加载类,它将通过反射可用。在运行时,任何感兴趣的一方(在这种情况下我假设 Spring 框架)都可以使用getAnnotations在您的 LocalConfiguration 类上检测 Merge 注释并采取任何需要采取的行动。可能性实际上取决于定义注释的框架。许多 Spring 注入的工作方式与注解类似,但它们也被许多其他框架使用,例如 Hibernate、Jersey 等。主要思想是注解充当特定代码点上的标记,供外部实体稍后使用观点。