很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等。这里给出几种解决方案供大家参考。

1. 使用@PostConstruct注解

这个注解呢,可以在Spring加载这个类的时候执行一次。来看一下下方代码。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @Component public class
Test { public Test(){ System.out.println("我最先执行"); } /** *我第二个执行 */ @Autowired
private T t; /** *我第三个个执行 */ @PostConstruct private void init(){ //假装有代码 } }
上方就是@PostConstruct注解的使用方法了,同时也表示了此类被加载时的执行顺序。

2. CommandLineRunner接口

使用CommandLineRunner接口类似于Main方法启动,可以接受一个字符串数组的命令行参数,来看一下实现

1 2 3 4 5 6 7 8 @Component public class MyCommandLineRunner implements
CommandLineRunner{ @Override public void run(String... args) throws Exception{
//假装有代码 } }
3. ApplicationRunner 接口

此种方式与实现CommandLineRunner接口的区别就是他的参数是ApplicationArguments

1 2 3 4 5 6 7 8 9 10 @Order(value = 1) @Component public class
MyApplicationRunner implements ApplicationRunner{ @Override public void
run(ApplicationArguments args) throws Exception{ //假装有代码 } }
我们可以看到,此类相比较于第二种方式还增加一个@Order注解,这个注解其实第二种方式也是能加的。

它的作用就是控制类的加载顺序,这个顺序是从小到大的。比如说启动时先去加载Order的value等于1的类,然后去加载等于2的类。

本文出自http://zhixiang.org.cn <http://zhixiang.org.cn/>,转载请保留。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信