从Spring Boot 2.0.3更新到2.2.4后,ComponentScan找不到自己的自定义注释
在从Spring Boot 2.0.3更新到2.2.4之前,我们有一些注释,如以下示例:从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
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 {
}