SpringBoot监听机制
- ApplicationContextInitializer
- ApplicationRunner
- CommandLineRunner
- SpringApplicationRunListener
项目结构
MyAppInitializer
@Component public class MyAppInitializer implements ApplicationContextInitializer { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("MyAppInitializer run ..."); } }
MyApplicationRunner
@Component public class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("application runner run..."); } }
MyCommandLineRunner
@Component public class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("command line runner run ..."); } }
MySpringRunListener
@Component public class MySpringRunListener implements SpringApplicationRunListener { @Override public void starting(ConfigurableBootstrapContext bootstrapContext) { System.out.println("开始运行..."); } @Override public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) { System.out.println("环境准备中 ..."); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("上下文对象开始准备 ..."); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("上下文对象开始加载 ..."); } @Override public void started(ConfigurableApplicationContext context, Duration timeTaken) { System.out.println("上下文对象加载完毕 ..."); } @Override public void ready(ConfigurableApplicationContext context, Duration timeTaken) { System.out.println("开始运行 ..."); } @Override public void failed(ConfigurableApplicationContext context, Throwable exception) { System.out.println("失败..."); } }
运行结果
发现只有MyApplicationRunner和MyCommandLineRunner运行了
用处:缓存预热
MyAppInitializer的使用
新建spring.factories
将接口与实现类对应写入
org.springframework.context.ApplicationContextInitializer=com.rikka.springbootinit.listener.MyAppInitializer
运行后发现成功运行MyAppInitializer
MySpringRunListener的使用
将接口与实现类写入spring.factories
在MySpringRunListener中添加构造函数
public MySpringRunListener(SpringApplication application,String[] args){ }
并删除@Component
成功运行