最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别_天天看热讯

来源:博客园


【资料图】

0、参考、业务需求

  • 参考:https://www.cnblogs.com/java-chen-hao/p/11835120.html#_label1https://zhuanlan.zhihu.com/p/541268993
  • 业务需求:缓存数据字典数据、初始化线程池、提前加载好加密证书

1、方式

  • 实现 ApplicationRunner 接口
  • 实现 CommandLineRunner 接口
  • 实现 InitializingBean 接口
  • 使用 @PostConstruct 标签

2、@Order

  • 可以使用@Order注解或Ordered接口改变 ApplicationRunner 和 CommandLineRunner执行顺序
  • @Order 对 InitializingBean 和 @PostConstruct 不生效。

3、测试使用

  • ApplicationRunner
@Component@Order(3)public class App01 implements ApplicationRunner {    @Override    public void run(ApplicationArguments args) throws Exception {        System.out.println("App01_执行了……@Order(3)");    }}
@Component@Order(2)public class App02 implements ApplicationRunner {    @Override    public void run(ApplicationArguments args) throws Exception {        System.out.println("App02_执行了……@Order(2)");    }    }
  • CommandLineRunner
@Component@Order(1)public class Com01 implements CommandLineRunner {    @Override    public void run(String... args) throws Exception {        System.out.println("Com01_执行了……@Order(1)");    }}
@Component@Order(0)public class Com02 implements CommandLineRunner {    @Override    public void run(String... args) throws Exception {        System.out.println("Com02_执行了……@Order(0)");    }}
  • InitializingBean
/** @Order没用 * @author CC * @since 2023/5/17 0017 */@Component@Order(7)public class Ini01 implements InitializingBean {    @Override    public void afterPropertiesSet() throws Exception {        System.out.println("Ini01_执行了……@Order(7)");    }}
/** @Order没用 * @author CC * @since 2023/5/17 0017 */@Component@Order(4)public class Ini02 implements InitializingBean {    @Override    public void afterPropertiesSet() throws Exception {        System.out.println("Ini02_执行了……@Order(4)");    }}
  • @PostConstruct
/** @Order没用 * @author CC * @since 2023/5/17 0017 */@Component@Order(6)public class Pos01 {    @PostConstruct    public void customizeName(){        System.out.println("Pos01_执行了……@Order(6)");    }    }
/** @Order没用 * @author CC * @since 2023/5/17 0017 */@Component@Order(5)public class Pos02 {    @PostConstruct    public void customizeName(){        System.out.println("Pos02_执行了……@Order(5)");    }    }

4、执行顺序、建议使用

  • 通过实现得出执行顺序
InitializingBean > @PostConstruct > ApplicationRunner > CommandLineRunner
  • 没有执行顺序要求,使用:@PostConstruct
  • 有执行顺序要求,使用:ApplicationRunner(推荐)或者CommandLineRunner

关键词: