从Spring Boot 2.0.3更新到2.2.4后,ComponentScan找不到自己的自定义注释

从Spring Boot 2.0.3更新到2.2.4后,ComponentScan找不到自己的自定义注释,spring,spring-boot,migration,spring-annotations,component-scan,Spring,Spring Boot,Migration,Spring Annotations,Component Scan,在从Spring Boot 2.0.3更新到2.2.4之前,我们有一些注释,如以下示例: import org.springframework.stereotype.Component; @Component public @interface Adapter { } 在ComponentScan期间,使用此适配器注释注释的类被拾取并添加到Spring上下文中。更新后,现在有org.springframework.beans.factory.NoSuchBeanDefinitionExcep

在从Spring Boot 2.0.3更新到2.2.4之前,我们有一些注释,如以下示例:

import org.springframework.stereotype.Component;

@Component
public @interface Adapter {
}
在ComponentScan期间,使用此适配器注释注释的类被拾取并添加到Spring上下文中。更新后,现在有
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的'XY'类型的合格bean

根据关于刻板印象注释的术语中的一段,我们的方法应该有效:

任何带有@component注释的组件都是组件扫描的候选组件。类似地,任何使用注释进行注释的组件(其本身使用@component进行元注释)也是组件扫描的候选组件

我通读了SpringBoot2.1和2.2的发行说明以及SpringFramework 5.1和5.2的发行说明,但没有发现原型注释的行为在这一点上发生了任何变化

当我用Spring提供的原型注释(除了我们自己的注释之外)对类进行注释时,ComponentScan会获取它们

我还尝试在
@ComponentScan
中设置自定义过滤器,如下所示

@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,
    classes = Adapter.class))
但是仍然得到了
NoSuchBeanDefinitionException

最后,我在Spring框架中偶然发现了这一点,并怀疑这是否是我问题的根源


因此,到目前为止没有任何效果,如果有人能为我指出一个方向,恢复我们自己的原型注释再次发挥作用的原始行为,我会很高兴。提前感谢。

在仔细查看Spring原型注释后,在注释中添加@Retention(RetentionPolicy.RUNTIME)解决了这个问题。ComponentScan会再次拾取带有我们自己注释的类

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import org.springframework.stereotype.Component;

@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface Adapter {
}