SpringBoot下IOC初始化过程1--基于注解

540 阅读1分钟

在阅读源码的过程中,发现对SpringBoot下,JavaBean加载过程有些模糊。这篇文章,也是对自己在开发道路上的学习与记录。

=======================================

这里贴一下Spring启动过程

第一步:获取并启动监听器

第二步:构造容器环境

第三步:创建容器(SpringBoot一般是AnnotationConfigServletWebServerApplicationContext)

第四步:实例化SpringBootExceptionReporter.class,用来支持报告关于启动的错误

第五步:准备容器

第六步:刷新容器

第七步:刷新容器后的扩展接口

=====================================

IOC初始化过程发生在准备容器,刷新容器阶段。

AnnotationConfigServletWebServerApplicationContext:Spring容器上下文对象,保存各种信息。

DefaultListableBeanFactory():负责实例化Bean,工厂模式。它实现了BeanDefinitionRegistry接口, 具备了注册Bean的能力。

介绍一下beanDefinitionMap的数据结构:

private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

BeanDefinition接口定义(感性认识一下)

第一部分大致分三个过程(JavaBean相关):

1.加载Spring内部定义的Bean到(Context的BeanFactory下的)beanDefinitionMap中;

2.加载SpringApplication启动类(main方法实现位置)到 beanDefinitionMap中;

3.执行refreshContext,扫描指定目录下包含@Compent和@Compent子类的类到beanDefinitionMap中;

下面给出两张流程图(第一、二部分在图1,第三部分在图2)

========================================================================================

Spring内部自定义的Bean

小结: SpringIOC初始化过程的第一部分,AnnotationConfigServletWebServerApplicationContext将所有信息通过DefaultListableBeanFactory注册到beanDefinitionMap。Spring下一步就是Bean的创建和初始化。