在 java 中创建和使用注释

Creating and using annotation in 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");
    }
}

这是我随机选择的 class 中 @Merge 注释的用法。

当我检查代码时,我找不到任何与 Merge 注释的实现相关的 class。顺便说一句,我遇到的这个问题不仅仅是这个注释。我检查过的几乎所有注释都没有以任何方式实现。 如果我们从这个注释开始,我想我会理解其他的。 这个注解有什么作用?它给使用它的地方传递什么样的信息。应用程序如何理解该注释在运行时的作用而不在任何地方实现。

谢谢。

注释没有实现。它们由外部 classes 或工具处理,具体取决于您 LocalConfiguration class 上的 RetentionPolicy. In this case, the Merge annotation has Runtime retention so it will be available via reflection once the class is loaded. At runtime any interested party (in this case I assume the Spring Framework) can use getAnnotations 以检测 Merge 注释并采取任何需要采取的行动。可能性实际上取决于定义注释的框架。很多 Spring 注入都像这样使用注解,但它们也被许多其他框架使用,如 Hibernate、Jersey 等。主要思想是注解充当特定代码点的标记,供外部使用稍后的实体。