我正在回顾开源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
我随机选择的任何一个类的注解。
当我检查代码时,找不到任何与合并注解实现相关的类。顺便说一下,我遇到的问题不仅仅是这个注解。我检查过的几乎所有注解都是在没有以任何方式实现的情况下使用的。如果我们从这个注解开始,我想我会理解其他的。这是干什么的?它给了使用它的地方什么样的信息。应用程序如何理解该注解在运行时执行的操作而不在任何地方实现。
谢谢。
1条答案
按热度按时间thtygnil1#
注解没有实现。它们由外部类或工具根据retentionpolicy进行处理。在这种情况下,合并注解具有运行时保留,因此在加载类后,它将通过反射可用。在运行时,任何相关方(在本例中,我假设spring框架)都可以使用localconfiguration类上的getannotations来检测合并注解,并采取任何需要采取的操作。这些可能性实际上取决于定义注解的框架。很多spring注入都是这样与注解一起工作的,但它们也被许多其他框架(如hibernate、jersey等)使用。其主要思想是注解充当特定代码点上的标记,供外部实体稍后使用。