JavaConfig 中定义的 bean 的 NoSuchBeanDefinitionException
NoSuchBeanDefinitionException for bean defined in JavaConfig
我之前在项目中使用 XML 配置,一切正常。
我们正在逐步转向 java 配置,所以现在我正处于混合使用 Java 和 XML 配置的阶段。
问题来了,我的 XML 配置中定义了一个 bean:beanA。
<bean id="beanA" class="BeanA" />
class 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: Error creating bean with name 'beanB': Unsatisfied dependency expressed through field 'beanA';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.xxxxxx.yyy.zzzzzzzzzzzz.abc.beanA' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
请注意,
我只移动了要通过 java 配置创建的 beanB。
BeanA 实际上有更多的依赖,所以我不能在这个阶段将它移动到 java 配置(稍后将进行适当的迁移)。
您还需要在 xml 配置中添加 BeanB 的配置。当程序是 运行 时,它从 xml 配置文件加载所有 bean 定义。所以看起来配置文件中缺少 BeanB 定义。
Spring 不会 从用 @Configuration
注释的 类 加载 bean,除非它被 告知 使用此注释查找 类。
要让 spring 查找这些 类,必须在您的 xml 配置中添加以下内容:
<context:component-scan base-package="com.xxxxx.yyy.zzzz">
然后会递归查找并初始化包com.xxxxx.yyy.zzzz中的所有bean。
我之前在项目中使用 XML 配置,一切正常。
我们正在逐步转向 java 配置,所以现在我正处于混合使用 Java 和 XML 配置的阶段。
问题来了,我的 XML 配置中定义了一个 bean:beanA。
<bean id="beanA" class="BeanA" />
class 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: Error creating bean with name 'beanB': Unsatisfied dependency expressed through field 'beanA';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.xxxxxx.yyy.zzzzzzzzzzzz.abc.beanA' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
请注意,
我只移动了要通过 java 配置创建的 beanB。
BeanA 实际上有更多的依赖,所以我不能在这个阶段将它移动到 java 配置(稍后将进行适当的迁移)。
您还需要在 xml 配置中添加 BeanB 的配置。当程序是 运行 时,它从 xml 配置文件加载所有 bean 定义。所以看起来配置文件中缺少 BeanB 定义。
Spring 不会 从用 @Configuration
注释的 类 加载 bean,除非它被 告知 使用此注释查找 类。
要让 spring 查找这些 类,必须在您的 xml 配置中添加以下内容:
<context:component-scan base-package="com.xxxxx.yyy.zzzz">
然后会递归查找并初始化包com.xxxxx.yyy.zzzz中的所有bean。