如果想在springboot启动过程中完成某些工作,可以有如下挂接点:
1、main函数里
这个是最古老,也是最简单的挂接点。适合做些与 Spring 容器无关的前置操作。
2、实现CommandLineRunner类
@Component
@Order(1) // 执行优先级,1 比 2 先执行
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// 启动时执行的逻辑,比如初始化缓存、加载字典数据
System.out.println("CommandLineRunner 执行,命令行参数:" + String.join(",", args));
}
}
3、实现ApplicationRunner类
@Component
@Order(2)
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// 获取命名参数(如启动时传入 --name=test)
System.out.println("命名参数 name 的值:" + args.getOptionValues("name"));
// 获取非命名参数
System.out.println("非命名参数:" + args.getNonOptionArgs());
}
}
4、单个bean的初始化
@Component
public class MyBean {
@PostConstruct
public void init() {
// 当前 Bean 初始化后执行,比如初始化 Bean 内部的属性
System.out.println("Bean 初始化后执行 @PostConstruct");
}
}
- ApplicationListener(监听启动事件)
@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
// 实现对应接口即可
}
6.@Configuration注解
一般在注解类里实现初始化bean工作,不做业务初始化。