背景

ioc是spring的基础,即控制反转。springboot基于注解使用ioc.

ioc

spring称所有被管理的对象为bean,
spring ioc主要通过描述的方式完成3类bean的管理工作:

基本功能 说明
发布对象 包扫描业务bean,javaConfig或者xml的方式配置第三方bean
获取对象 BeanFactory或者ApplicationContext的子类获取bean
依赖注入对象 通过关键字@Autowired,属性注入,构造函数注入,方法注入

spring ioc的核心接口是BeanFactory和ApplicationContext ;

BeanFactory ApplicationContext
获取bean的方法 等同
判断是否是单例或者原型 等同
类型匹配 等同
获取bean的类型和别名 等同
-- MessageResource消息国际化功能
-- EnvironmentCapable环境可配置
-- ApplicationEventPublisher应用事件发布
-- ResourcePatternResolver资源模式解析

来个例子,发布和获取bean;

TODO

通过@ComponentSacn发布Bean

@ComponentScan源码阅读

主要方法 说明
basePackages 扫描的包路径
basePackageClasses 扫描的javaConfig类
includeFilters 包含的bean的过滤器
excludeFilters 排除的bean的过滤器
lazyInit 是否延迟初始化

javaConfig方式或者xml方式定义第三方Bean发布

javaConfig方式主要是增加@Configuration 和 @Bean注解来发布;

xml方式需要通过注解@ImportResource来引入

条件装配bean @Conditional(Condition实现类)

依赖注入

通过@Autowired来描述

通过@Primary和@Quelifier来消除歧义。

具体的依赖注入方式有 属性,构造函数,方法;

bean的生命周期

bean定义 -> bean初始化 ->bean生存期->bean销毁

bean定义:通过@ComponentScan扫描得到资源信息,从资源中解析出定义信息,然后把定义发布到spring容器中;

bean的初始化:创建bean,完成依赖注入,setBeanName,setBeanFactory,@PostConstruct标注的方法,postProcessorBeforeInitialzerion方法,setApplicationContext方法,afterPropertiesSet方法,postProcessorAfterInitialization方法;

bean生存期: 运行阶段直接使用

bean销毁: @PreDesctroy标注的方法,destory方法;

生命周期相关的扩展接口 说明
BeanNameAware 设置bean的名称
BeanFactoryAware 获取BeanFactory
ApplicationContextAware 获取ApplicationContext
InitializingBean 初始化bean
DisposableBean 销毁bean
BeanPostProcessor 所有ben的公共增强

属性文件

引入依赖:

spring-boot-configuration-processor;
然后使用@Value(“${xxx}”)来引用即可;

或者通过@ConfigurationProperties(“xxx”)直接组装到自定义类中;

还可以使用SpringEL来处理属性配置:

@Value("#{T(System).currentTimeMillis()}")

Bean作用域

作用域 说明
singleton 单例,全局唯一
prototype 原型,每次创建
session 每个http会话创建一个
application 同单例
request 每次请求创建一个

Profile

指明不同环境下启用的bean,springboot不同的profile对应不同的application-profile.yaml文件;

原创不易,转载请注明出处。

最新文章

  1. Postgresql 简单配置 (ubuntu server 14.04.3)
  2. 最近提交并被合并的 jDiameter pull request 31 解决的问题
  3. org.eclipse.wst.common.project.facet.core.xml文件模板,解决eclipse编译报错。
  4. getView 数据最后加一项
  5. Head First 设计模式系列之二----备忘录模式(java版)
  6. ORACLE函数之单行数字函数
  7. Make Things Move -- Javascript html5版(三)三角函数形式的动画
  8. Js里面的数组去重方法
  9. 从java的开始,java概述,java配置环境变量
  10. 【Html5】-- 塔台管制
  11. DSAPI TreeView节点增删简化操作
  12. MD5&&DES加密解密帮助类
  13. formdata的使用方法
  14. 【转】在Linux下安装python3
  15. NotBacon
  16. saltstack syndic
  17. Confluence 6 从一个 XML 备份中导入一个空间
  18. Activiti中子流程:SubProcess,CallActiviti的区别
  19. 开发框架DevExtreme发布v18.2.4|附下载
  20. C++语言定义的标准转换

热门文章

  1. PAT T1012 Greedy Snake
  2. ipmitool命令
  3. CSV文件自动化(自定义参数)
  4. icos_snake_port-to-port_configuration
  5. python学习记录(持续更新)--最最最基础的一部分(方法,异常处理,注释,类)
  6. 【原】postman设置环境变量和全局变量
  7. 解题报告:luogu P5745 【深基附B例】数列求和
  8. [Pytorch数据集下载] 下载MNIST数据缓慢的方案
  9. Java-读取.properties配置文件空指针异常java.lang.NullPointerException解决方法
  10. ServletContext简介