Springboot中main启动配置原理
一、概述:
众所周知,main方法作为程序的主入口,是启动程序的重要方法,是扫描,创建,加载所有组件的地方(配置类,组件,自动配置),那它的内部是如何运行?运行原理是如何?欲知下文:↓↓↓
二、分析
首先,想知道运行原理如何,需要关注几个核心的接口
第一步:创建SpringApplication对象
执行initialize方法
第二步:运行run方法
三、自定义事件监听机制,判断执行顺利是否正确
ApplicationContextInitializer:
1.用于在spring容器刷新之前初始化Spring ConfigurableApplicationContext的回调接口。(剪短说就是在容器刷新之前调用该类的 initialize 方法。并将 ConfigurableApplicationContext 类的实例传递给该方法)
2.通常用于需要对应用程序上下文进行编程初始化的web应用程序中。例如,根据上下文环境注册属性源或**配置文件等。
3.可排序的(实现Ordered接口,或者添加@Order注解)
SpringApplicationRunListener
作用主要就是在Spring Boot 启动初始化的过程中可以通过SpringApplicationRunListener接口回调来让用户在启动的各个流程中可以加入自己的逻辑
CommandLineRunner、ApplicationRunner
作用:需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的,执行时机为容器启动完成的时候.
启动测试,结果如下:
四、总结
1.启动时,首先创建SpringApplication对象,接着启动run方法。
2.run方法首先会从下META‐INF/spring.factories下获取有ApplicationContextInitializer(保存起来),和SpringApplicationRunListeners,并执行starting方法。
3.执行environmentPrepared表示环境准备完成,之后建ApplicationContext,决定创建web的ioc还是普通的ioc,回调ApplicationContextInitializer的initialize方法和SpringApplicationRunListener的contextPrepared方法。
4.执行SpringApplicationRunListener的contextLoaded方法:刷新容器,IOC容器初始化,同时扫描,创建,加载所有组件和自动配置。
5.SpringApplicationRunListener回调finished方法,这样整个SpringBoot应用启动完成以后,返回启动的IOC容器。