在Spring Boot:定制自己的starter一文提到,只要DbCountRunner这个类在classpath路径下,Spring Boot会自动创建对应的spring bean并添加到应用程序上下文中。
在文章最后提到,Spring Boot的自动配置机制依靠 @ConditionalOnMissingBean 注解判断是否执行初始化代码,即如果用户已经创建了bean,则相关的初始化代码不再执行。
现在在上篇文章的基础上进行演示,看看 @ConditionalOnMissingBean 注解的作用。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
@Configuration
public class DbCountAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories) {
return new DbCountRunner(repositories);
}
}
修改日志级别为DEBUG,可以看到DbCountAutoConfiguration属于 Positive match 组。
@Bean
public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories) {
return new DbCountRunner(repositories) {
@Override
public void run(String... strings) throws Exception {
logger.info("Manually Declared DbCountRunner");
}
};
}