<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
目前開發的SpringBoot專案在啟動的時候需要預載入一些資源。而如何實現啟動過程中執行程式碼,或啟動成功後執行,是有很多種方式可以選擇,我們可以在static程式碼塊中實現,也可以在構造方法裡實現,也可以使用@PostConstruct註解實現。
當然也可以去實現Spring的ApplicationRunner與CommandLineRunner介面去實現啟動後執行的功能。在這裡整理一下,在這些位置執行的區別以及載入順序。
static靜態程式碼塊,在類載入的時候即自動執行。
在物件初始化時執行。執行順序在static靜態程式碼塊之後。
@PostConstruct註解
PostConstruct註解使用在方法上,這個方法在物件依賴注入初始化之後執行。
ApplicationRunner和CommandLineRunner
SpringBoot提供了兩個介面來實現Spring容器啟動完成後執行的功能,兩個介面分別為CommandLineRunner和ApplicationRunner。
這兩個介面需要實現一個run方法,將程式碼在run中實現即可。這兩個介面功能基本一致,其區別在於run方法的入參。ApplicationRunner的run方法入參為ApplicationArguments,為CommandLineRunner的run方法入參為String陣列。
何為ApplicationArguments
官方檔案解釋為:
”Provides access to the arguments that were used to run a SpringApplication.
在Spring應用執行時使用的存取應用引數。即我們可以獲取到SpringApplication.run(…)的應用引數。
Order註解
當有多個類實現了CommandLineRunner和ApplicationRunner介面時,可以通過在類上新增@Order註解來設定執行順序。
為了測試啟動時執行的效果和順序,編寫幾個測試程式碼來執行看看。
TestPostConstruct
@Component public class TestPostConstruct { static { System.out.println("static"); } public TestPostConstruct() { System.out.println("constructer"); } @PostConstruct public void init() { System.out.println("PostConstruct"); } }
TestApplicationRunner
@Component @Order(1) public class TestApplicationRunner implements ApplicationRunner{ @Override public void run(ApplicationArguments applicationArguments) throws Exception { System.out.println("order1:TestApplicationRunner"); } }
TestCommandLineRunner
@Component @Order(2) public class TestCommandLineRunner implements CommandLineRunner { @Override public void run(String... strings) throws Exception { System.out.println("order2:TestCommandLineRunner"); } }
執行結果
Spring應用啟動過程中,肯定是要自動掃描有@Component註解的類,載入類並初始化物件進行自動注入。載入類時首先要執行static靜態程式碼塊中的程式碼,之後再初始化物件時會執行構造方法。
在物件注入完成後,呼叫帶有@PostConstruct註解的方法。當容器啟動成功後,再根據@Order註解的順序呼叫CommandLineRunner和ApplicationRunner介面類中的run方法。
因此,載入順序為static>constructer>@PostConstruct>CommandLineRunner和ApplicationRunner.
到此這篇關於SpringBoot啟動時自動執行程式碼的幾種實現方式的文章就介紹到這了,更多相關SpringBoot啟動自動執行程式碼內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45