ApplicationContextInitializer SpringApplicationRunListener
只需要放在ioc容器中ApplicationRunner CommandLineRunner
创建SpringApplication对象
保存主配置类
判断当前是否时一个web应用
从类路径下找到 META-INFO/spring.factories 配置的所有 ApplicationContextInitialize;
类路径下找到 META-INFO/spring.factories 配置的所有 ApplicationListener
从多个配置类中找到有main方法的主配置类
运行 run 方法
声明IOC容器从类路径下 META-INFO/spring.factories 获取 SpringApplicationRunListeners回调所有获取的 SpringApplicationRunListener.starting() 方法封装命令行参数准备环境;创建环境后完成回调 SpringApplicationRunListener.environmentPrepared(); 表示环境准备完成 (in wai le meng ci pei er)打印 banner 图标创建 ApplicationContext;决定创建 web 的 ioc 还是普通的 ioc做异常分析报告准备上下文环境,将 environment 保存到 ioc 中;而且执行 applyInitializers()【应用初始化】; 回调之前保存的所有 ApplicationContextInitializer 的 Initialize 方法;回调所有的 SpringApplicationRunListener 的 contextPrepared();prepareContext 运行完成后回调所有 SpringApplicationRunListener 的 contextLoaded()刷新容器;ioc 容器初始化(如果是web应用还会创建嵌入式的Tomcat);扫描,创建,加载所有组件的地方;从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调;ApplicationRunner先回调,CommandLineRunner再回调所有的 SpringApplicationRunListener回调 finished 方法整个 SpringBoot应用启动完成以后返回启动的 ioc 容器;配置在META-INF/spring.factories
ApplicationContextInitializer
public class HelloApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("ApplicationContextInitializer...initialize..."+applicationContext); } }SpringApplicationRunListener
package com.akieay.akieayblog.admin.listener; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplicationRunListener; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; /** * @author admin */ public class HelloSpringApplicationRunListener implements SpringApplicationRunListener { //必须有的构造器 public HelloSpringApplicationRunListener(SpringApplication application, String[] args){ } @Override public void starting() { System.out.println("SpringApplicationRunListener...starting..."); } @Override public void environmentPrepared(ConfigurableEnvironment environment) { Object o = environment.getSystemProperties().get("os.name"); System.out.println("SpringApplicationRunListener...environmentPrepared.."+o); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("SpringApplicationRunListener...contextPrepared..."); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("SpringApplicationRunListener...contextLoaded..."); } @Override public void started(ConfigurableApplicationContext context) { System.out.println("SpringApplicationRunListener...started..."); } @Override public void running(ConfigurableApplicationContext context) { System.out.println("SpringApplicationRunListener...running..."); } @Override public void failed(ConfigurableApplicationContext context, Throwable exception) { System.out.println("SpringApplicationRunListener...failed..."); } }配置(META-INF/spring.factories)
org.springframework.context.ApplicationContextInitializer=\ com.akieay.akieayblog.admin.listener.HelloApplicationContextInitializer org.springframework.boot.SpringApplicationRunListener=\ com.akieay.akieayblog.admin.listener.HelloSpringApplicationRunListener只需要放在ioc容器中
ApplicationRunner
@Component public class HelloApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("ApplicationRunner...run...."); } }CommandLineRunner
@Component public class HelloCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner...run..."+ Arrays.asList(args)); } }