首页 > 解决方案 > spring 正在寻找第一个字母大写错误的 bean

问题描述

我有一个我肯定的 bean 在 spring 正在扫描的包中(它的所有兄弟姐妹都成功地工作)。


@Service
class BeanB {

}

@Service
@DependsOn("BeanB")
class BeanA {

  @Autowired
  BeanB b;

}

但是,当我运行它时,我得到了这个:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'BeanB' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:682)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1218)
    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.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:297)
    ... 34 more

然而BeanB是存在的。

当我深入研究 spring 内部(DefaultListableBeanFactory beanDefinitionMap)时,它说它有一个名为beanB. 为什么spring无法找到并连接正确的@AutoWired(或@Injectbean,第一个字母的大写似乎已关闭?

我看过什么是 NoSuchBeanDefinitionException 以及如何修复它?但它似乎没有处理“我的bean在那里但无法从大写中找到”的情况

标签: javaspring

解决方案


事实证明,试图找到合适的 bean 来自动装配并没有死,真正的罪魁祸首是,@DependsOn但它确实让我陷入了一个循环,所以在这里记录它。

修复:使用 spring 样式类 -> 命名约定:

@DependsOn("beanB")
class BeanA {

...

推荐阅读