我的方法是通过 方式六 加载成功的。
springboot 启动类有两大核心: 一个是注解@SpringBootApplication,一个是main方法里面的SpringApplication.run。
1、通过main方法 启动springboot
2、首先进入SpringAplication类run方法
3、run方法新建SpringApplication对象
4、SpringApplication对象的run方法,首先创建并启动计时监控类
5、接着调用getRunListeners创建所有spring监听器
6、接着DefaultApplicationArguments初始化应用应用参数
7、接着prepareEnvironment根据运行监听器和参数准备spring环境
8、接着调用createApplicationContext方法创建应用上下文
9、通过prepareContext准备应用上下文
10、refreshContext方法刷新上下文(通过spring ioc模板方法初始化)
11、调用stop方法停止计时监控器类
12、调用started发布应用上下文 启动完成事件
13、callRunners方法执行所有runner运行器
14、调用running发布应用上下文就绪事件
15、最后返回应用上下文
方式一:实现ServletContextListener接口
@Component
public class SpringBootInitialization1 implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("方式一:实现ServletContextListener接口");
}
}
方式二:方法上加注解@PostConstruct
@Component
public class SpringBootInitialization2 {
@PostConstruct
public static void init() {
System.out.println("方式二:方法上加注解@PostConstruct");
}
}
方式三:实现ServletContextAware接口
@Component
public class SpringBootInitialization3 implements ServletContextAware {
@Override
public void setServletContext(ServletContext servletContext) {
System.out.println("方式三:实现ServletContextAware接口");
}
}
方式四:实现ApplicationListener接口
@Component
public class SpringBootInitialization4 implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("方式四:实现ApplicationListener<ContextRefreshedEvent>接口");
}
}
方式五:实现ApplicationRunner接口
@Component
public class SpringBootInitialization5 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("方式五:实现ApplicationRunner接口");
}
}
方式六:实现CommandLineRunner接口
@Component
public class SpringBootInitialization6 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("方式六:实现CommandLineRunner接口");
}
}