文章目录
目录
前言
主要介绍了Ioc的定义、依赖注入方式、Ioc Service Provider。
一、定义
- Ioc全程Invertion of control依赖反转,也可以称为依赖注入,是一种帮助我们解耦各业务对象之间依赖关系的对象绑定方式
- Spring的Ioc容器比如BeanFactory或者ApplicationContext实现创建对象和依赖注入等Ioc Service Provider功能
- 容器主要分为两个阶段
- 第一阶段是容器初始化,通过BeanDefinitionRead或者其他方法解析配置信息获取所有被控对象以及对象依赖关系信息存在beandefinition里,然后注册到beandefinitionregistry,然后可以通过BeanFactoryPostProcessor进行初始化阶段的扩展,比如通过properties文件内容修改bean的一些property值,或者将自定义的scope或者自定义PropertyEditor注入到BeanDefinition里后续实例化bean阶段使用
- 第二阶段时,bean的实例化阶段,首先会根据beandefinition信息进行,反射或者cglib动态生成字节码创建子类;然后通过beanwrapper进行属性注入,PropertyAccessor实现统一的属性注入+PropertyEditor实现字符串到对象类型转变;然后BeanPostProcessor前置进行Aware接口依赖注入,然后看看是不是InitilizingBean有没有配置init-method;然后BeanPostProcessor后置处理;然后注册DisposableBean或者destroy-method销毁方法;设置销毁的时间;投入使用;容器关闭或者自定义时刻对象会被销毁
二、依赖注入方式
- 构造方法注入B
- 在被注入对象的构造方法参数中获取被依赖对象并被创建被依赖实例对象
- 对象构造完成时,被依赖对象就已经创建好并处于就绪态
- 被依赖对象只会新建一次,整个创建过程应该由Ioc service provider全程管理
- setter方法注入A
- 通过在被注入类里设置setter方法,创建出一个被注入对象实例后,只有需要使用被依赖类时,才会主动调用setter方法让Ioc service provider创建被依赖类
- 接口注入C
- Ioc service provider实现一个接口,这个接口里面有一个方法传入的参数是被依赖类对象实例
三、Ioc Service Provider
- Spring中的Ioc容器实现其功能
- 职责
- 创建业务对象
- 业务对象之间的依赖绑定
- Ioc service provider怎么获得对象里的依赖关系
- 直接编码
- 在程序中编码创建被依赖对象并注入被注入对象
- 配置文件
- XML配置文件
- 元数据
- 注解+代码处理
- 直接编码