解讀CommandLineRunner和@PostConstruct區(qū)別與應(yīng)用場(chǎng)景
時(shí)機(jī)和觸發(fā)方式
- CommandLineRunner 接口的run方法在整個(gè)Spring Boot應(yīng)用程序啟動(dòng)完成后執(zhí)行。它是在應(yīng)用程序啟動(dòng)的最后階段觸發(fā)的,這樣你可以確保在Spring Boot應(yīng)用程序完全啟動(dòng)并準(zhǔn)備好接受請(qǐng)求之前執(zhí)行你的邏輯。
- @PostConstruct注解標(biāo)注的方法會(huì)在Spring容器實(shí)例化Bean并完成依賴注入后立即執(zhí)行。這意味著它是在Bean的生命周期中非常早的階段執(zhí)行的,但在整個(gè)Spring應(yīng)用程序完全啟動(dòng)之前。
參數(shù)傳遞
- CommandLineRunner接口的run方法可以接受一個(gè)字符串?dāng)?shù)組參數(shù),這個(gè)數(shù)組包含了應(yīng)用程序啟動(dòng)時(shí)傳遞的命令行參數(shù)。這為你提供了一種在應(yīng)用程序啟動(dòng)時(shí)動(dòng)態(tài)配置或執(zhí)行不同的邏輯的機(jī)會(huì)。
- @PostConstruct注解的方法不能接受參數(shù),因?yàn)樗峭ㄟ^反射調(diào)用的。這意味著你不能直接在方法中獲取Spring Boot應(yīng)用程序啟動(dòng)時(shí)的參數(shù)。
應(yīng)用場(chǎng)景
CommandLineRunner
- 適用于整個(gè)SpringBoot程序啟動(dòng)后執(zhí)行的初始化邏輯
- 可以執(zhí)行程序級(jí)別操作,如執(zhí)行定時(shí)任務(wù)、執(zhí)行數(shù)據(jù)加載等
- 提供了訪問命令行參數(shù)的能力,可以在run方法中獲取應(yīng)用程序啟動(dòng)時(shí)傳遞的參數(shù)。
@PostConstruct
- 用于spring Bean初始化階段執(zhí)行的一些邏輯
- 一般用于與Bean屬性初始化的相關(guān)操作,比如初始化資源、建立鏈接等等
使用方式
CommandLineRunner
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// 在應(yīng)用程序啟動(dòng)后執(zhí)行的邏輯
}
}
@PostConstruct
@Component
public class MyBean {
@PostConstruct
public void init() {
// 在Bean初始化階段執(zhí)行的邏輯
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot3整合Swagger3時(shí)出現(xiàn)Type javax.servlet.http.H的ttpSe
這篇文章主要介紹了SpringBoot3整合Swagger3時(shí)出現(xiàn)Type javax.servlet.http.H的ttpServletRequest not present錯(cuò)誤解決方法,文中有詳細(xì)的解決方法,需要的朋友可以參考下2025-01-01
SpringBoot啟動(dòng)后自動(dòng)執(zhí)行初始化任務(wù)的五種方法
在 Spring Boot 開發(fā)中,我們經(jīng)常需要在應(yīng)用啟動(dòng)后立即執(zhí)行初始化任務(wù),本文將深度解析 ??5 種主流實(shí)現(xiàn)方案??,大家可以根據(jù)自己的需求自行選擇2025-04-04
Java實(shí)現(xiàn)兩人五子棋游戲(六) 行棋方變換
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的兩人五子棋游戲,行棋方變換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
SpringBoot+Mybatis Plus導(dǎo)致PageHelper失效的解決方法
在Springboot項(xiàng)目中使用分頁插件的時(shí)候,發(fā)現(xiàn)PageHelper插件失效了 ,本文主要介紹了SpringBoot+Mybatis Plus導(dǎo)致PageHelper失效的解決方法,感興趣的可以了解一下2024-07-07
Java數(shù)據(jù)結(jié)構(gòu)之加權(quán)無向圖的設(shè)計(jì)實(shí)現(xiàn)
加權(quán)無向圖是一種為每條邊關(guān)聯(lián)一個(gè)權(quán)重值或是成本的圖模型。這種圖能夠自然地表示許多應(yīng)用。這篇文章主要介紹了加權(quán)無向圖的設(shè)計(jì)與實(shí)現(xiàn),感興趣的可以了解一下2022-11-11
eclipse構(gòu)建和發(fā)布maven項(xiàng)目的教程
這篇文章主要為大家詳細(xì)介紹了eclipse構(gòu)建和發(fā)布maven項(xiàng)目的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
SpringBoot實(shí)現(xiàn)短信發(fā)送及手機(jī)驗(yàn)證碼登錄
本文主要介紹了SpringBoot實(shí)現(xiàn)短信發(fā)送及手機(jī)驗(yàn)證碼登錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
IDEA強(qiáng)制清除Maven緩存的實(shí)現(xiàn)示例
清除項(xiàng)目緩存是一個(gè)常見的操作,本文主要介紹了IDEA強(qiáng)制清除Maven緩存的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java實(shí)現(xiàn)帶有權(quán)重隨機(jī)算法的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)帶有權(quán)重隨機(jī)算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10

