Springboot 项目的整个启动流程

Java小哥

共 1174字,需浏览 3分钟

 ·

2021-10-28 22:48

要从注解讲起否则就是耍流氓

@SpringBootApplication注解

 讲解:该注解是一个复合注解,它由三个注解组成。

            ①@SpringBootConfiguration(打开是@Configuration):表明这是一个java配置类

            ②@EnableAutoConfiguration:自动配置注解,会将所有符合自动配置条件的@Configuration配置加载到IOC容器中。

            ③@ComponentScan:扫描注解,自动扫描符合条件的组件 (@Service,@Component)或者bean定义,记载到IOC容器中

 springBoot的启动流程

  1. 从spring.factories配置文件中加载EventPublishingRunListener对象,该对象拥有SimpleApplicationEventMulticaster属性,即在springboot启动过程的不同阶段用来发射内置的生命周期事件。

  2. 准备环境变量,包括系统变量,环境变量,命令行参数,默认变量,servlet相关配置变量,随机值及配置文件(比如application.properties)等

  3. 控制台打印springboot的bannner标志

  4. 根据不同类型环境创建不同类型的applicationcontext容器,如果是servlet环境,创建的就是AnnotationConfigServletWebServerApplicatonContext容器对象

  5. 从spring.factories配置文件中加载FailureAnalyZers对象,用来报告springboot启动过程中的异常

  6. 为刚创建的容器对象做一些初始化工作,准备一些容器属性值等,对ApplicationContext应用一些相关的后置处理和调用各个ApplicationContextInitializer的初始化方法来执行一些初始逻辑等

  7. 刷新容,这一步至关重要。比如调用bean factory的后置处理器,注册BeanPostProcessor后置处理器,初始化事件广播器且广播事件,初始化剩下的单例bean和springboot创建内嵌的Tomcat服务器等重要且复杂的逻辑都在这里实现

  8. 执行刷新新容器后的后置处理逻辑,注意这里为空方法

  9. 调用ApplicationRunner和CommandLineRunner的run方法,我们实现这两个接口可以在spring容器启动后需要的一些东西 比如加载一些业务数据等

  10. 报告启动异常,即若启动过程中抛出异常,此时哟个FailureAnalyzers来报告异常

  11. 最终返回容器对象,这里调用方法没有声明对象来接收

 

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报