1、 如果我们使用的是SpringApplication的静态run方法,在SpringApplication执行初始化
1.判断webApplicationType类型 REACTIVE SERVLET NONE
2.使用SpringFactoriesLoader在应用的classpath下的META-INF/spring.factories中加载所有ApplicationContextInitializer。
3.使用SpringFactoriesLoader在应用的classpath下的META-INF/spring.factories中加载所有ApplicationListener。
2、 开始执行run方法首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载的SpringApplicationRunListener。调用它们的started()方法。
3、 创建并配置当前Spring Boot应用使用的prepareEnvironment
4、 遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法,其中加载application.yaml文件就在这里。
5、 打印banner。
6、 根据实际环境创建的ApplicationContext。
7、 创建异常报告exceptionReporters
8、 执行prepareContext方法,对容器做一些相关设置。
9、 核心prepareContext,此布为@EnableAutoConfiguration自动化配置的关键,注册的关键。
1.准备此上下文以进行刷新 prepareRefresh();
2.告诉子类刷新内部bean工厂。ConfigurableListableBeanFactory beanFactory = getFreshBeanFactory();
3.准备在此上下文中使用的bean工厂。prepareBeanFactory(beanFactory);
4.允许在上下文子类中对bean工厂进行后处理。postProcessBeanFactory(beanFactory);
5.调用在上下文中注册为bean的工厂处理器。invokeBeanFactoryPostProcessors(beanFactory);
6.注册拦截Bean创建的Bean处理器。registerBeanPostProcessors(beanFactory);
7.为此上下文初始化消息源。initMessageSource();
8.为此上下文初始化事件多播器。initApplicationEventMulticaster();
9.在特定上下文子类中初始化其他特殊bean。onRefresh();
10.检查侦听器bean并注册它们。registerListeners();
11.实例化所有剩余的(非延迟初始化)单例。finishBeanFactoryInitialization(beanFactory);
12.最后一步:发布相应的事件。finishRefresh()之后创建web服务器如:Tomcat;
10、 afterRefresh 查找当前ApplicationContext中是否注册有,ApplicationRunner,CommandLineRunner,则遍历执行它们。
11、 执行 listeners的started,running方法;
Spring Boot的启动流程
最新推荐文章于 2024-08-08 15:48:27 发布