4.3配置自定义情况的Bean实例

4.3配置自定义情况的Bean实例

  在前面的例子中, 我们已经学习了如何去获取基础的Spring Boot Strater。在包含jar的应用路径下,DbCountRunner bean将会自动创建和添加到应用的上下文件中。在非常前的章节中,我们已经看到Spring Boot有能力去依赖一些情况来加载bean,例如特殊的路径下的类,已经存在的bean等。

  在这个章节,我们将会创建一个DbCountRunner,在bean实例存在时创建和加入到应用上下文中。

4.3.1代码实现

1.在DbCountAutoConfiguration的类中,我们将加入@ConditionOnMissingBean的注释到dbCountRunner()方法上。

 @Bean
@ConditionalOnMissingBean
public DbCountRunner dbCountRunner(Collection<CrudRepository>
repositories) {
return new DbCountRunner(repositories);
}

 

2.我们也需要在db-count-starter/build.grable文件中加入包的引用。

 compile("org.springframework.boot:spring-bootautoconfigure:1.2.3.RELEASE")

 

3.现在启动项目,将会在日志控制台看到如下的信息:

 DbCountAutoConfiguration#dbCountRunner
- @ConditionalOnMissingBean (types:
org.test.bookpubstarter.dbcount.DbCountRunner; SearchStrategy: all)
found no beans (OnBeanCondition)

 

4.接着,我们在BookPubApplication类中实例我们的DbCountRunner的类,我们将会去重写run()的方法。

 protected final Log logger = LogFactory.getLog(getClass());
@Bean
public DbCountRunner dbCountRunner(Collection<CrudRepository>
repositories) {
return new DbCountRunner(repositories) {
@Override
public void run(String… args) throws Exception {
logger.info("Manually Declared DbCountRunner");
}
};
}

 

5.启动项目,你将会看到如下的信息。

 DbCountAutoConfiguration#dbCountRunner
- @ConditionalOnMissingBean (types:
org.test.bookpubstarter.dbcount.DbCountRunner; SearchStrategy: all)
found the following [dbCountRunner] (OnBeanCondition)

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在上下文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值