【问题标题】:org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'eventpublisher' availableorg.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为“eventpublisher”的bean可用
【发布时间】:2017-10-06 14:19:31
【问题描述】:

我有一个 Spring Boot 应用程序。我用@Component 注释对项目的一个类进行了注释。现在在我的主类中,当我试图获取类的 bean 时,我得到一个异常,它无法找到 bean。

Exception in thread "main" [2m2017-05-08 09:53:55.303[0;39m [32m INFO[0;39m [35m9112[0;39m [2m---[0;39m [2m[       Thread-2][0;39m [36ms.c.a.AnnotationConfigApplicationContext[0;39m [2m:[0;39m Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@4df828d7: startup date [Mon May 08 09:53:54 EDT 2017]; root of context hierarchy
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'eventpublisher' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081)
    at com.fannie.SpringEventGenerationJBsApplication.main(SpringEventGenerationJBsApplication.java:17)

我被注释为组件的类正在关注

@Component
public class EventPublisher implements ApplicationEventPublisherAware {
    @Autowired
    private ApplicationEventPublisher publisher;

    public void eventpublishers() {
        ActualEvent actualEvent = new ActualEvent(this);
        System.out.println(actualEvent);
        publisher.publishEvent(actualEvent);
    }

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
        this.publisher = publisher;
    }
}

@SpringBootApplication
@ComponentScan(basePackages = {"com.fannie"})
public class SpringEventGenerationJBsApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(SpringEventGenerationJBsApplication.class, args);

        EventPublisher ep = (EventPublisher) context.getBean("eventpublisher");

        ep.eventpublishers();
    }

【问题讨论】:

  • bean 名称是从类名生成的,第一个字符是小写的...所以EventPublisher 将变为eventPublisher 而不是eventpublisher
  • 谢谢你的作品。非常感谢。
  • @M.Deinum 也许您应该将其添加为答案。你刚刚解决了我的问题,如果我能至少给你点个赞,那就太好了。
  • @DP3 请接受@M.Deinum 写的答案。它对我和你都有效。 :)

标签: java spring spring-boot


【解决方案1】:

据记录 here

Spring 为未命名的组件生成 bean 名称,遵循上述规则:本质上,采用简单的类名并将其初始字符转为小写

因此,当有一个通过组件扫描检测到的类EventPublisher 时,生成的bean 名称将是eventPublisher

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 2012-11-20
    • 2014-11-14
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多