写点什么

spring-beans 注册 Beans(二) springboot 启动流程

用户头像
梦倚栏杆
关注
发布于: 2021 年 06 月 06 日

本篇文章的主要目的是为了展示我们写的 @Configuration 注解的类是在何时加载的,有个全局的概念.


一、环境信息:

我们以 spring-boot 1.4.1.RELEASE 版本为例,阐述 bean 注册过程.

二、代码执行流程分析

1.入口代码的执行流程:

@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}
复制代码

执行流程如下:

  1. 接着上图的 refresh 过程,详细的执行流程如下:

//class: org.springframework.boot.SpringApplication// line : 315refreshContext(context);//最终调用:===>class: org.springframework.context.support.AbstractApplicationContext// line: line507
复制代码



和 Bean 注册相关的主要两个地方:

(1)invokeBeanFactoryPostProcessors==> 将相关 BeanDefinition 注册到 DefaultListableBeanFactory

入口执行方法: ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(registry);

(2)finishBeanFactoryInitialization(beanFactory)===>将相关的 Bean 实例化(非懒加载的).

入口执行方法: DefaultListableBeanFactory.preInstantiateSingletons().

  1. 从 refresh 到 PostProcessor

如下图:



(1)AbstractApplicationContext 里获取的 beanFactoryPostProcessors(),只有如下三个:



(2)主要用来加载 Bean 的 ConfigurationClassPostProcessor 是在下述阶段完成的,逐步细分

A> createApplicationContext()

B> new AnnotatedBeanDefinitionReader(registry);

C> AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);


下一篇文章,将专门分析 ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(registry)执行流程.


系列文章:

spring-beans 注册Beans(一) 之问题场景复现

spring-beans 注册 Beans(二) springboot 启动流程

发布于: 2021 年 06 月 06 日阅读数: 18
用户头像

梦倚栏杆

关注

还未添加个人签名 2018.04.22 加入

还未添加个人简介

评论

发布
暂无评论
spring-beans 注册 Beans(二) springboot启动流程