【问题标题】:NoSuchBeanDefinitionException for bean defined in JavaConfigJavaConfig 中定义的 bean 的 NoSuchBeanDefinitionException
【发布时间】:2019-11-11 14:53:37
【问题描述】:

我之前在我的项目中使用 XML 配置,一切正常。

我们正在逐渐转向 java 配置,所以现在我正处于使用 Java 和 XML 配置混合的阶段。

问题来了,我的 XML 配置中定义了一个 bean:beanA。

<bean id="beanA" class="BeanA" />

BeanA 类对 BeanB 具有自动装配依赖关系。

class BeanA {
     @Autowired
     BeanB beanB;
}

之前,这个 beanB 也在 XML 配置中,并且运行正确。

现在,我做了这个更改,但它不再起作用了:

@Configuration
class MyConfig {
    @Bean
    public BeanB beanB() {
        return new BeanB();
    }
}

除了添加@Configuration@Bean 注释之外,我还缺少其他需要做的事情吗?

我收到以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“beanB”的bean时出错:通过字段“beanA”表达的依赖关系不满足;

嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 'com.xxxxxx.yyy.zzzzzzzzzzzz.abc.beanA' 类型的合格 bean 可用:

预计至少有 1 个 bean 有资格作为自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

请注意,

  1. 我只移动了 beanB 以通过 java config 创建。

  2. BeanA 实际上有更多的依赖关系,所以我不能在这个阶段将它移动到 java 配置中(稍后将进行适当的迁移)。

【问题讨论】:

    标签: spring javabeans autowired xmlbeans


    【解决方案1】:

    您还需要在 xml 配置中添加 BeanB 的配置。当程序运行时,它会从 xml 配置文件中加载所有 bean 定义。所以看起来配置文件中缺少 BeanB 定义。

    【讨论】:

    • 好吧,事情就是这样,我确实让它与 xml 文件中的 beans 一起工作,但我想将它们移出。因此,有意从 XML 中删除了 BeanB 定义。
    【解决方案2】:

    Spring不会从带有 @Configuration 注释的类中加载 bean,除非它被告知查找带有该注释的类。

    要让 spring 查找这些类,必须在您的 xml 配置中添加以下内容:

    &lt;context:component-scan base-package="com.xxxxx.yyy.zzzz"&gt;

    然后它将递归查找并初始化包 com.xxxxx.yyy.zzzz 中的所有 bean。

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 2017-10-10
      • 2018-05-25
      • 2017-10-09
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多