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

4.3配置自定义情况的Bean实例相关推荐

  1. Spring-基于注解的配置[02自动装载bean]

    使用Autowired进行自动注入 实例 使用Auotwired的required属性 实例 使用Qualifier指定注入Bean的名称 实例 对类方法进行标注 实例 小结 对集合类进行标注 实例 ...

  2. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

  3. initializeBean()方法为容器产生的Bean 实例对象添加BeanPostProcessor 后置处理器

    同样在AbstractAutowireCapableBeanFactory 类中,initializeBean()方法实现为容器创建的Bean实例对象添加BeanPostProcessor 后置处理器 ...

  4. Spring 4.x 源码系列4-创建bean实例

    创建bean实例(createBeanInstance 方法) AbstractAutowireCapableBeanFactory 的 createBeanInstance 方法实现了创建 bean ...

  5. php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码

    目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...

  6. Spring容器中获取Bean实例的七种方式(附实战源码)

    目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...

  7. AbstractAutoWireCapableBeanFactory 对Bean 实例进行属性依赖注入

    应用第一次通过getBean()方法(配置了lazy-init 预实例化属性的除外)向IOC 容器索取Bean 时,容器创建Bean 实例对象, 并且对Bean 实例对象进行属性依赖注入,Abstra ...

  8. python类定义的讲解_python面向对象、自定义类等使用实例讲解

    python 面向对象相对别的语言来说缺少两个功能: 1.python不具备重载,重载是指在同一个类中,使得方法有相同的名称,但是有不同的参数列表,但由于python函数具有强大的参数处理功能,因此这 ...

  9. java手工注入bean_java相关:Spring中如何动态注入Bean实例教程

    java相关:Spring中如何动态注入Bean实例教程 发布于 2020-3-8| 复制链接 摘记: 前言在Spring中提供了非常多的方式注入实例,但是由于在初始化顺序的不同,基于标注的注入方式, ...

  10. 一个简单的EJB-Session Bean实例

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一个简单 ...

最新文章

  1. 从NoSQL到Lakehouse,Apache Doris的13年技术演进之路
  2. linux下程序如何实现单实例运行
  3. 具有CompletableFuture的异步超时
  4. 马化腾定义腾讯是普通公司,这波重新定义“普通”可还行......
  5. Open Flash Chart 图表组件
  6. 题目:求1 + 2!+ 3!+ ... + 20!的和
  7. SharePoint读取和设置列表栏的内容
  8. html语言format,HTML 文本格式化
  9. 利用小波分解后,频率计算问题
  10. NIPS2022各学校统计,去China是200+哦~
  11. 融云直播 SDK 2.0 上线,轻松获得视频直播能力
  12. grant之后要跟着flush privileges吗?
  13. table里的th和td加了边框后,他是两个边框重合的,1PX就变成了2PX
  14. python时间函数纳秒_python 时间 纳秒_Pandas时间序列(翻译)
  15. CAD碎片化学习教程 @4. 按比例放大或缩小图形尺寸
  16. Kali下用wifite破解WIFI
  17. 无论你英语多差,只要想学,看了此文必有改变
  18. EventLog Analyzer应用程序日志管理
  19. Altium Designer使用方法(DRC警告设置,走线技巧,DIY电路板打印技术)
  20. 汽车行业每周新闻纵览

热门文章

  1. 一个关于finally和return的面试题
  2. 更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误...
  3. 23种设计模式(2):工厂方法模式
  4. WCF基础学习笔记--创建WCF服务
  5. JS实现各种页面的刷新
  6. Spring中事务管理的几种配法
  7. easyui获取图片路径_094 ego电商项目-2 菜单、图片上传、CRUD
  8. php 回调通知 连连支付_微信小程序支付及退款流程详解
  9. LNMP详解(四)——LNMP原理与简单部署
  10. 震惊!99%的人不知道的Linux权限问题细节