SpringIOC源码解读(大纲)
Spring核心IOC源码解读
前言:Spring IOC容器是Spring核心的模块,阅读源码了解它的运行机制,可以更深刻地理解Spring中bean的生成原理、生命周期等。更可以了解各个Spring中接口的作用,对其理解并加以运用。
使用XML文件的方式创建SpringBean容器
ClassPathXmlApplicationContext父类结构图
ClassPathXmlApplicationContext 在new对象初始化时,调用 refresh() 方法,此方法为父类 AbstractApplicationContext 的方法。这里用了一个设计模式: 模板方法模式 。
AbstractApplicationContext.refresh()
prepareRefresh();
做一些简单的初始化操作
1.校验环境参数;
2.初始化early集合;
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 获取BeanFactory
这步很重要,初始化了beanFactory,还解析了xml文件从中定义了对象的BeanDefinition。
详解链接:Spring核心IOC源码解读(一)获取BeanFactory
AbstractApplicationContext.prepareBeanFactory(); 准备BeanFactory
为BeanFactory做准备,初始化一些属性,包括:SpEL解析器、属性注册器、Bean后置处理器、系统环境属性
详解链接:Spring核心IOC源码解读(二)为BeanFactory准备数据
AbstractApplicationContext.invokeBeanFactoryPostProcessors(beanFactory) 引用BeanFactoryPostProcessors实现类的postProcessBeanFactory(beanFactory)方法
这一步主要是执行实现了BeanFactoryPostProcessors接口的postProcessBeanFactory()方法,在获取到bean对象之后,执行此方法
详解链接:Spring核心IOC源码解读(三)实现BeanFactoryPostProcessors接口的postProcessBeanFactory方法
AbstractApplicationContext.registerBeanPostProcessors(bean, beanName) 调用BeanPostProcessor实现类的postProcessAfterInitialization(bean, beanName)方法
在获取到Bean对象之后,执行此方法,和(三)种的逻辑类似,也是进行了排序。
SpringIOC核心getBean()方法
这个方法是SpringIOC的核心,包括了使用对象的创建(反射),对象的依赖(多级缓存),对象的生命周期实现等。
详解: