概念&原理:
源码:
SpringBoot 事假监听器发布顺序:
1 1.ApplicationStartingEvent在运行开始时发送,但在进行任何处理之前(侦听器和初始化程序的注册除外)发送。
2 2.在创建上下文之前,将发送ApplicationEnvironmentPreparedEvent。
3 3.准备ApplicationContext并调用ApplicationContextInitializers之后,将发送ApplicationContextInitializedEve
nt。
4 4.读取完配置类后发送ApplicationPreparedEvent。
5 5.在刷新上下文之后但在调用任何应用程序和命令行运行程序之前,将发送ApplicationStartedEvent。
6 6.紧随其后发送带有LivenessState.CORRECT的AvailabilityChangeEvent,以指示该应用程序被视为处于活动状态。
7 7.在调用任何应用程序和命令行运行程序之后,将发送ApplicationReadyEvent。
8 8.紧随其后发送ReadabilityState.ACCEPTING_TRAFFIC的AvailabilityChangeEvent,以指示应用程序已准备就绪,可以
处理请求。
9 如果启动时发生异常,则发送ApplicationFailedEvent。
- ApplicationStartingEvent
- ApplicationEnvironmentPreparedEvent
1.调用SpringApplication.run启动springboot应用
1 SpringApplication.run(Application.class, args);
2.使用自定义SpringApplication进行启动
1 public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
2 return new SpringApplication(primarySources).run(args);
3 }
1. 创建SpringApplication
- new SpringApplication(primarySources)
1 public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
2 this.resourceLoader = resourceLoader;
3 Assert.notNull(primarySources, "PrimarySources must not be null");
4 // 将启动类放入primarySources
5 this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
6 // 根据classpath 下的类,推算当前web应用类型(webFlux, servlet)
7 this.webApplicationType = WebApplicationType.deduceFromClasspath();
8 // 就是去spring.factories 中去获取所有key:org.springframework.context.ApplicationContextInitializer
9 setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
10 //就是去spring.factories 中去获取所有key: org.springframework.context.ApplicationListener
11 setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
12 // 根据main方法推算出mainApplicationClass
13 this.mainApplicationClass = deduceMainApplicationClass();
14 }
- org.springframework.context.ApplicationContextInitializer
- org.springframework.context.ApplicationListener
总结:
1.获取启动类
2.获取web应用类型
3.读取了对外扩展的ApplicationContextInitializer ,ApplicationListener
4.根据main推算出所在的类
就是去初始化了一些信息
分享就到这里了,该文章后续及更多JAVA技术知识可关注我,免费领取