当前位置: 首页 > 知识库问答 >
问题:

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

杜元明
2023-03-14

在从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可用

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

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

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

@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,
    classes = Adapter.class))

但仍然获得NosuchBeanDefinitionException

最后,我在Spring框架中偶然发现了这个“增强”,并怀疑这是否是我的问题的根源。

所以到目前为止还没有什么工作,如果有人能给我指明一个方向,恢复我们自己的刻板印象注释再次工作的原始行为,我会很高兴。提前谢了。

共有1个答案

祁博雅
2023-03-14

在仔细研究了Spring原型注释之后,将@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 {
}
 类似资料:
  • 我有一个程序,只是为了移动图像。我试着陈述自我。rect作为load_png()调用的一部分,但它并不喜欢它。我认为这会起作用的原因是http://www.pygame.org/docs/tut/tom/games6.html他说这应该行得通: 这是我的代码,根据pygame自己网站上的教程,它应该可以工作: 它给了我这个错误: 如果你们需要我所有的代码,评论吹了,我会编辑它。

  • > 我不能使基本包属性是动态的,即我不能传递,但需要在配置中预先定义包。 我查看了,但无法使其工作。 当我忽略基本包时,扫描从注释的定义包开始,而不是从注释类的包开始。在上面的示例中,它只扫描并创建中类的bean,而不扫描并创建中的bean。 如果将放在类上,则一切都可以工作,但当将其移动到的元注释时,将停止工作。如何告诉Spring Framework将视为使用某些默认值指定的另一种方式。我尝试

  • 它找不到我添加到库中的费率栏库。 下面是我如何将我的库添加到应用程序中的 根级文件 依赖关系{...实现“xxx.xxx.xxxx:xxxx:1.0.6”...}

  • 考虑logdj、slf4j等日志库。它们有类似于<代码>日志的方法。信息(“”)。假设我想在这个库的顶部添加我自己的自定义方法,这样我就可以像这样使用它 log.audit ('') 向现有库中添加此类自定义方法的最佳方法是什么?

  • 嗨,我正在尝试学习hashcode()和equals()方法的目的。我尝试了以下程序。 输出: 我有两个疑问: 1) 我认为HashMap将包含一个条目,因为两个对象(ob1和ob2)的hascode是相同的。有人能解释为什么HashMap中有两个条目吗? 2)为什么返回false?