SpringBoot启动过程

SpringApplication的run方法

    使用SpringFactoriesLoader读取listener和ApplicationContextInitializer

    创建环境变量,读取配置信息  

    创建上下文(IoC容器,ApplicationContext)

    预初始化上下文(prepareContext):将Application类读取成BeanDefinition

    刷新上下文:

        a. 加载所有的自动配置类,把bean解析成beanDefinition(invokeBeanFactoryPostProcessors)(SpringBoot的自动配置就是在这一步)

        b. onRefresh里面createWebServer(tomcat)

        c. 实例化bean(finishBeanFactoryInitialization)(完成bean的生命周期)

 

整个过程中会有很多事件的发布,调用监听器对外进行扩展

 

下图是调用static的run方法以后,实例化SpringApplication,并通过SpringFactoriesLoader读取一些initializer,listener

 

实例化以后就执行run方法

 

 

 

展开看refreshContext方法,主要做了三件事

1. bean生命周期前的一些工作:加载除Application类和一些processor的bean外的所有bean,将他们生成BeanDefinition加入到DefaultListableBeanFactory的beanDefinitionMap中  ,将bean以ObjectBean的形式加入到三级缓存

2. 启动tomcat

3. 执行bean的生命周期(实例化,属性设置,aware接口,初始化前方法,初始化,初始化后方法,放入IoC容器)

 

 

 

 

如果想在SpringBoot启动完成的时候立刻做一些事情(比如初始化一些数据等),可以实现ApplicationRunner接口,并加个Component注解

 

posted @ 2024-03-15 16:53  坏男银  阅读(6)  评论(0编辑  收藏  举报