Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程

分析IOC容器最主要的还是通过观察refresh()方法,在refresh是整个IOC容器的核心

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第1张图片

刷新前的预处理工作

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第2张图片  

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第3张图片 

if里面打印的是日志 

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第4张图片 

初始化属性配置

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第5张图片 

进行属性校验

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第6张图片 

保存事件

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第7张图片 

获取bean工厂

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第8张图片 

 Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第9张图片

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第10张图片 

 进行BeanFactory的准备工作

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第11张图片 

 

BeanFactory 初始化之后进行的后置处理工作。

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第12张图片 

执行 BeanFactoryPostProcessor;BeanFactoryPostProcessor:beanFactory的后置处理器。在Bean Factory标准化初始化之后执行的

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第13张图片

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第14张图片 

继续分析

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第15张图片 

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第16张图片 

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第17张图片 

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第18张图片 

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第19张图片 

按照类型获取所有的postProcessor组件

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第20张图片 

前面所讲的都是对bean factory的初始化处理,接下来分析对bean的处理

注册BeanPostProcessor(Bean的后置处理器)

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第21张图片 

 注意:对于不同接口类型的BeanPostProcessor;在Bean创建前后的执行时机是不一样的

获取所有的BeanPostProcessor

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第22张图片

对BeanPostProcessor进行校验 

 Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第23张图片

将初始化好的bean放入到beanFactory中

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第24张图片

 获取BeanFactory

看容器中是否存在Id为messageSource

如果有赋值给messageSource,如果没有自己创建DelegatingMessageSource;

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第25张图片

把创建好的MessageSource注册在容器中,以后获取值的时候,直接可以自动注入MessageSource;

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第26张图片

初始化事件派发器

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第27张图片 

获取工厂

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第28张图片 

onRefresh方法:初始化其他特定的beans在具体的context subClasses。

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第29张图片 

 registerListeners():检查那个listener beans 和添加监听器

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第30张图片

 将ApplicationEvent多路派发出去

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第31张图片

初始化所有剩下的bean

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第32张图片 

初始化所有剩下的单实例

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第33张图片 

具体的初始化操作

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第34张图片 

 其内部初始化基本顺序:

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第35张图片

最后一步完成IOC容器的创建工作。

Spring的深入浅出--12.再次深入分析IOC容器底层源码实现流程_第36张图片 

总结:

1、Spring容器在启动的时候,先会保存所有注册进来的Bean的定义信息;

     1)xml注册bean;

     2)注解注册bean:@Service、@Component、@Bean、xxx

2、Spring容器会合适的时机创建这些bean

     1)用到这个bean的时候,利用getBean创建bean;创建好以后保存在容器中;

     2)统一创建剩下所有的bean的时候;finishBeanFactoryInitialization();

3)、后置处理器:beanPostProcessor

     1)、每一个bean创建完成,都会使用各种后置处理器进行处理;来增强bean的功能;

             AutowiredAnnotationBeanpostProcessor:处理自动注入

             AnnotationAwareAspectJAutoProxyCreator:来做AOP功能;

             增强的功能注解:

             AsyncAnnotationBeanPostProcessor

4)、事件驱动模式

ApplicationListener:事件监听;

ApplicationEvenMulticaster:事件派发

 

你可能感兴趣的:(Spring框架深入分析,Spring的深入浅出)