Spring Boot ApplicationListener事件监听机制实现解析
下文有更容易理解的解释
- Spring Boot内置了以下事件
- ApplicationStartingEvent--->run方法首次启动时立即调用
- ApplicationEnvironmentPreparedEvent--->环境准备之后 创建Appplicationcontex之前
- ApplicationContextInitializedEvent--->创建applicationContext之后 未加载任何bean之前
- ApplicationPreparedEvent--->在应用程序上下文已加载但尚未刷新之前调用
- ApplicationStartedEvent--->上下文已刷新应用程序已启动但尚未调用 未调用applicationRunner和CommandLineRunner
- ApplicationReadyEvent--->调用所有CommandLineRunner和applicationRunner之后
- ApplicationFailedEvent--->异常错误时
package com.jeegit.starter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class JeeGitApplication {
@RequestMapping("/")
String home() {
return "Hello World!+JeeGit:Hello World 33.";
}
public static void main(String[] args) {
SpringApplication app = new SpringApplication(JeeGitApplication.class);
// ConfigurableApplicationContext configurableApplicationContext= SpringApplication.run(JeeGitApplication.class, args);
app.addListeners(new ApplicationPreparedEventListener());
app.addListeners(new ApplicationStartedEventListener());
app.run(args);
System.out.println("JeeGit:Hello World2 !");
}
@Bean
public DataLoader dataLoader() {
return new DataLoader();
}
@Slf4j
static class DataLoader implements CommandLineRunner {
@Override
public void run(String... strings) throws Exception {
System.out.println("Loading data..."+strings.length);
for (String s:strings)
System.out.println("Loading data..."+s.toString());
//log.info("Loading data...");
}
}
}