46.3.2 Bean条件

@ConditionalOnBean@ConditionalOnMissingBean注解可以根据特定类是否存在决定bean的包含,你可以使用value属性指定beans(by type),也可以使用name定义beans(by name),search属性用于限制搜索beans时需要考虑的ApplicationContext层次。

当被放置在一个@Bean方法时,目标类型默认为方法的返回类型,例如:

@Configuration
public class MyAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MyService myService() { ... }

}

在上面的例子中,如果ApplicationContext里没有类型为MyService的bean,那么myServicebean将会被创建。

你需要注意bean定义添加的顺序,因为这些条件的计算是基于目前处理内容的。出于这个原因,我们推荐在自动配置类上只使用@ConditionalOnBean@ConditionalOnMissingBean注解(即使保证它们在其他用户定义的beans后加载)。

@ConditionalOnBean@ConditionalOnMissingBean不会阻止@Configuration类的创建,在类级别使用那些conditions跟使用注解标记每个@Bean方法是等价的。

最后更新于