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

Bean定义被AutoConfiguration覆盖

云开诚
2023-03-14

在我的Spring应用程序中,我定义了auditListener类型的bean。

@Component
public class AuditListener {
}
// successful
beanFactory.getBean(org.springframework.boot.actuate.audit.listener.AuditListener.class);

// fails with NoSuchBeanDefinitionException
beanFactory.getBean(demo.AuditListener.class);
java.lang.IllegalStateException: Failed to execute ApplicationRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:791)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:778)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
    at demo.DemoApplication.main(DemoApplication.java:14)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'demo.AuditListener' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:347)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)
    at demo.DemoApplication.run(DemoApplication.java:27)
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:788)
    ... 11 more

DefaultListableBeanFactory日志

信息10140---[main]o.s.b.f.s.DefaultListableBeanFactory:用不同的定义重写bean“Audit Listener”的bean定义:用[Root bean:class[demo.auditListener];scope=singleton;abstract=false;lazyInit=false;autowiremode=0;dependencycheck=0;autowirecandidate=true;primary=false;factorybeanname=null;factorymethodname=null;

如何将auditlistenerbean都放到上下文中而不重命名自己的上下文?

编辑:如果我在不同的包中定义了两个具有相同类名的bean,我会得到一个冲突的BeanDefinitionException,所以ApplicationContext甚至不会启动。

共有1个答案

穆高澹
2023-03-14

您可以为bean指定一个名称,这样它就不会与springbootbean冲突

@Component(value = "myCustomAuditListener ")
public class AuditListener {
}

然后使用@qualifies按名称MyCustomAuditListener注入

 类似资料:
  • 我正在尝试使用基于Java的配置而不是来自这篇博文的XML配置将配置引入Spring Boot:http://blog.novoj.net/2012/03/27/combining-custom-annotations-for-securing-methods-with-spring-security/ 我得到以下例外: org . spring framework . beans . facto

  • 首先,我是Spring集成和Spring JMS方面的新手,所以我尝试采用的解决方案可能不适合我的需求。 我将尝试解释我需要实现什么:基本上,我需要将消息放在一个队列中,并在另一个队列中异步等待答案。 1、将消息放入队列: 我的解决方案: -- 2.异步监听来自另一个队列的回复消息: 我的解决方案1: 自定义MessageListener实现javax.jms.MessageListener。 然

  • 问题内容: 我正在使用Bootstrap 3,并且有一个显示一些数据的表。在此表中,我已应用了一些JavaScript进行条件格式设置,如果满足条件,则将元素的类设置为“红色” HTML的元素如下: 我现在在文本颜色适用的奇数行上有冲突,但是背景颜色被自举程序中的以下CSS覆盖。 我该如何解决此冲突并确保红色阶级有上风? 问题答案: 您的问题很可能与特异性有关。克里斯·科耶尔(ChrisCoyie

  • 由 Spring IoC 容器管理的对象称为 Bean,Bean 根据 Spring 配置文件中的信息创建。 我们可以把 Spring IoC 容器看作是一个大工厂,Bean 相当于工厂的产品。如果希望这个大工厂生产和管理 Bean,就需要告诉容器需要哪些 Bean,以哪种方式装配。 Spring 配置文件支持两种格式,即 XML 文件格式和 Properties 文件格式。 Properties

  • 将@Singleton直接应用于包含@PostConstruct和@Transactional的服务类按预期工作 - 调用@PostConstruct并且事务方法工作正常。 将bean定义移动到如下所示的@Factory中仍然有效,MyService singleton仍然被创建,但没有得到增强-@PostConstruct未被调用,事务方法将无法工作(无法获取当前线程的事务同步会话) 与Spri

  • 我开发了一个自定义的锁屏应用程序。基本上,当屏幕关闭时,应用程序将启动并解锁股票锁定屏幕,然后当屏幕打开时,用户将看到我的自定义锁定屏幕。到目前为止工作得很好,直到最近我发现,有时当我按下主页按钮时,屏幕会快速闪烁一次,当这种情况发生时,它会使我的自定义锁屏失败。当屏幕打开时,股票锁定屏幕将出现,我的自定义锁定屏幕只有在用户解锁股票锁定屏幕后才会显示。有人知道这个问题吗?或者任何建议?提前感谢。