很多時候我們都會碰到需要在程序啓動時去執行的方法,比如說去讀取某個配置,預加載緩存,定時任務的初始化等。這裏給出幾種解決方案供大家參考。
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,轉載請保留。