谈谈spring IOC 的 理解,原理与实现
- 控制反转:理论思想,原来的对象是由使用者来进行控制,有了spring后,可以把整个对象交给spring帮我们创建
控制反转-DI:依赖注入,把对应的属性的值注入到具体的对象中,@Autowired 完成属性值得注入 - 容器:存放对象,使用map结构存储,在spring中一般存在三级缓存,在singletonObjects存放完整的bean对象。整个bean的生命周期从创建到使用,到销毁的过程全部有容器来管理(bean的生命周期)
-
容器对象的创建:
1.最上层有个BeanFactory,这个只是一个接口,一般使用多的是DefaultListableBeanFactory,在创建的时候,会向bean工厂中设置一些参数(BeanPostProcessor,Aware接口的子类)等属性
BeanFactory继承体系.png
- 加载解析bean对象,准备要创建的bean对象的定义对象beanDefinition(xml或者注解方式)
- beanFactoryPostProcessor的处理
- BeanPostProcessor的注册功能,方便后续对bean对象完成具体的扩展功能
5.通过反射方式将BeanDefinition对象实例化成具体的bean对象
6.bean对象的初始化过程(填充属性,调用Aware子类的方法,调用BeanPostProcessor前置处理方法,调用init-method 方法,调用BeanPostProcessor的后置处理方法)
- 生成完整的bean对象,通过getBean方法可以直接获取
- 销毁过程。
谈一下对spring IOC的底层实现
spring bean的生命周期
bean的生命周期指的是Bean从创建到销毁的整个过程,分为4大部分
- 实例化
- 属性赋值
- 初始化
- 销毁
1、bean对象实例化
2、封装属性
3、如果bean实现BeanNameAware执行setBeanName
4、如果Bean实现BeanFactoryAware或者ApplicationContextAware设置工厂setBeanFactory或者setApplicationContext
5、如果存在类实现BeanPostProcessor,执行postProcessorBeforeInitialization
6、如果bean实现InitializitionBean执行afterPropertiesSet
7、调用bean init-method方法
8、如果类实现BeanPostProcessor,执行postProcessorAfterInitializaiton
9、执行业务逻辑
10、如果bean实现DisposableBean执行destory
11、调用bean destory-method 方法