4.3配置自定义情况的Bean实例
在前面的例子中, 我们已经学习了如何去获取基础的Spring Boot Strater。在包含jar的应用路径下,DbCountRunner bean将会自动创建和添加到应用的上下文件中。在非常前的章节中,我们已经看到Spring Boot有能力去依赖一些情况来加载bean,例如特殊的路径下的类,已经存在的bean等。
在这个章节,我们将会创建一个DbCountRunner,在bean实例存在时创建和加入到应用上下文中。
4.3.1代码实现
1.在DbCountAutoConfiguration的类中,我们将加入@ConditionOnMissingBean的注释到dbCountRunner()方法上。
@Bean |
2.我们也需要在db-count-starter/build.grable文件中加入包的引用。
compile("org.springframework.boot:spring-bootautoconfigure:1.2.3.RELEASE") |
3.现在启动项目,将会在日志控制台看到如下的信息:
DbCountAutoConfiguration#dbCountRunner |
4.接着,我们在BookPubApplication类中实例我们的DbCountRunner的类,我们将会去重写run()的方法。
protected final Log logger = LogFactory.getLog(getClass()); |
5.启动项目,你将会看到如下的信息。
DbCountAutoConfiguration#dbCountRunner 2020-04-05 INFO org.test.bookpub.BookPubApplication$1 : Manually Declared DbCountRunner |
4.3.2代码说明
我们从前面的章节中学习到,在我们的应用上下文创建时,Spring Boot会自动从spring.factories文件中装载类。没有任何额外的向导,每一个加了注释@Bean都会被创建Spring Bean.这样的功能实际上是旧的Spring framework Java Configuration的功能。Spring Boot有能力去判断什么时候加了@Configuration 或@Bean的注释需要被加载;什么时候这个注释需要被忽略。
在这个例子中,我们使用@ConditionalOnMissingBean的注释去引导Spring Boot去创建我们的DbCountRunner的bean。 这种情况只限于没有其它的bean可以匹配,或者是类(或bean)没有在任何地方创建。当我们创建@Bean在DbCountRunner方法上,该方法位于BookPubApplication类中时,这样会导致OnBeanCodition去探测bean的实例,并且引导Spring Boot 不要去使用DbCountAutoConfiguration在上下文件中。