Spring引导@ConditionalOnBean没有检测到bean缺失,抛出异常“没有类型的限定bean”

时间:2015-10-06 22:05:12

标签: dependency-injection spring-boot conditional

这个@Configuration类需要一个实现JmsProperties的bean,它在@ConditionalOnBean中声明

@Configuration
@ConditionalOnBean(JmsProperties.class)
public class JmsConfiguration {

    @Inject
    private JmsProperties properties;
    ...
}

获得例外:

   Caused by: 
   org.springframework.beans.factory.NoSuchBeanDefinitionException:        
   No qualifying bean of type [com.....JmsProperties] found for dependency: 

是不是@ConditionalOnBean应该检测到这个丢失的bean而不是首先尝试注入依赖项?

提前感谢任何指针

2 个答案:

答案 0 :(得分:2)

您已在Spring Boot tracker上交叉发布,开发人员回复了:

  在处理完所有配置类之后评估

@ConditionalOnBean,即您不能使用它来使整个配置类以另一个bean的存在为条件。但是,您可以在必须使所有配置的bean以另一个bean的存在为条件的情况下使用它。

答案 1 :(得分:0)

您必须使用@ComponentScan(basePackages =""。 没有使用它你的应用程序将不会发现&注册/实例化所有定义的bean,因此你最终会遇到这种类型的异常,即找不到bean。