最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot啟動(dòng)時(shí)執(zhí)行某些操作的8種方式

 更新時(shí)間:2025年10月17日 10:40:52   作者:(farerboy)  
在真實(shí)項(xiàng)目開發(fā)過(guò)程中,我們經(jīng)常會(huì)需要在程序啟動(dòng)時(shí)執(zhí)行一些特定的業(yè)務(wù)操作,比如系統(tǒng)預(yù)熱、系統(tǒng)初始化等,小編為大家介紹 8 種實(shí)現(xiàn)方式,需要的朋友可以參考下

實(shí)現(xiàn)方案

一、ApplicationRunner

1. 執(zhí)行時(shí)機(jī)

SpringBoot 應(yīng)用完全啟動(dòng)后。

2. 核心特點(diǎn)

實(shí)現(xiàn) ApplicationRunner 接口,通過(guò) ApplicationArguments 對(duì)象訪問(wèn)參數(shù),可以更方便地解析命令行參數(shù)(例如獲取--key=value形式的參數(shù)值)。

如果定義了多個(gè)Runner,可以使用 @Order 注解來(lái)控制他們的執(zhí)行順序,數(shù)值越小優(yōu)先級(jí)越高。

3. 代碼示例

@Component
@Order(1) // 執(zhí)行順序,可選
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 這里寫你的啟動(dòng)執(zhí)行邏輯,例如初始化緩存
        // args 可以訪問(wèn)應(yīng)用參數(shù)
    }
}

二、CommandLineRunner

1. 執(zhí)行時(shí)機(jī)

SpringBoot 應(yīng)用完全啟動(dòng)后。

2. 核心特點(diǎn)

實(shí)現(xiàn) CommandLineRunner 接口,通過(guò) String... args 直接訪問(wèn)命令行原始參數(shù)數(shù)組。

如果定義了多個(gè)Runner,可以使用 @Order 注解來(lái)控制他們的執(zhí)行順序,數(shù)值越小優(yōu)先級(jí)越高。

3. 代碼示例

@Component
@Order(2) // 執(zhí)行順序,可選
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        // 這里寫你的啟動(dòng)執(zhí)行邏輯
        // args 可以訪問(wèn)命令行原始參數(shù)
    }
}

三、@PostConstruct 注解

1. 執(zhí)行時(shí)機(jī)

Bean 初始化時(shí),在對(duì)象依賴注入完成后執(zhí)行。

2. 核心特點(diǎn)

注解在方法上,使用簡(jiǎn)單。

此時(shí) Spring 容器可能還未完全初始化完畢,部分 Bean 可能尚未就緒,需注意可能的依賴問(wèn)題。

3. 代碼示例

@Component
public class MyInitBean {
    @Autowired
    private SomeRepository repository; // 假設(shè)的倉(cāng)庫(kù)類,用于數(shù)據(jù)訪問(wèn)
 
    @PostConstruct
    public void init() {
        // 例如,在項(xiàng)目啟動(dòng)時(shí)從數(shù)據(jù)庫(kù)加載數(shù)據(jù)到靜態(tài)變量
        List<SomeData> data = repository.findAll();
        // ... 其他處理邏輯
    }
}

四、實(shí)現(xiàn) InitializingBean 接口

1. 執(zhí)行時(shí)機(jī)

Bean 的全部屬性被設(shè)置之后執(zhí)行。

2. 核心特點(diǎn)

實(shí)現(xiàn)接口的 afterPropertiesSet 方法。

與 @PostConstruct 類似,都是 Bean 生命周期中的初始化方法。

3. 代碼示例

@Component
public class MyInitializingBean implements InitializingBean {
    @Autowired
    private SomeDependency dependency;
 
    @Override
    public void afterPropertiesSet() throws Exception {
        // 確保屬性dependency注入后,再執(zhí)行初始化
        // 你的初始化邏輯
    }
}

五、實(shí)現(xiàn) BeanPostProcessor 接口

1. 執(zhí)行時(shí)機(jī)

在 Bean 的初始化前后執(zhí)行。

2. 核心特點(diǎn)

實(shí)現(xiàn)接口的 postProcessBeforeInitialization 與 postProcessAfterInitialization 方法。

這個(gè)接口會(huì)影響所有的 bean 初始化。

3. 代碼示例

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 在初始化之前執(zhí)行的邏輯
        System.out.println("Before Initialization: " + beanName);
        return bean; // 返回bean本身或一個(gè)新的bean實(shí)例(可選)
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // 在初始化之后執(zhí)行的邏輯
        System.out.println("After Initialization: " + beanName);
        return bean; // 返回bean本身或一個(gè)新的bean實(shí)例(可選)
    }
}

六、實(shí)現(xiàn) BeanFactoryPostProcessor 接口

1. 執(zhí)行時(shí)機(jī)

在 Spring 容器初始化時(shí)執(zhí)行,此時(shí)容器中所有的 Bean 定義已經(jīng)加載完,但是 Bean 的實(shí)例還未創(chuàng)建。

2. 核心特點(diǎn)

實(shí)現(xiàn)接口的 postProcessBeanFactory 方法。

這個(gè)接口只會(huì)執(zhí)行一次,執(zhí)行時(shí)機(jī)早于 BeanPostProcessor 。

3. 代碼示例

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
 
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("******************** MyBeanFactoryPostProcessor#postProcessBeanFactory ****************");
        System.out.println("******************** bean的數(shù)量:[{}] ****************", beanFactory.getBeanDefinitionCount());
        BeanDefinition userBeanDef = beanFactory.getBeanDefinition("student");
        // 修改bean definition屬性信息
    }
 
}

七、實(shí)現(xiàn) ServletContextListener 接口

1. 執(zhí)行時(shí)機(jī)

Web 應(yīng)用啟動(dòng)初期,在初始化任何過(guò)濾器或 Servlet 時(shí)或者銷毀 Web 容器時(shí)執(zhí)行。

2. 核心特點(diǎn)

實(shí)現(xiàn)接口的 contextInitialized 和 contextDestroyed 方法。

適用于 Web 環(huán)境,監(jiān)聽(tīng) Servlet 上下文。

3. 代碼示例

@Component
public class MyServletContextListener implements ServletContextListener {
 
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 在這里寫Web應(yīng)用啟動(dòng)時(shí)的邏輯
        // 例如,初始化一些Web應(yīng)用級(jí)別的資源
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // 在這里寫Web應(yīng)用關(guān)閉時(shí)的清理邏輯
    }
}

八、static 靜態(tài)代碼塊

1. 執(zhí)行時(shí)機(jī)

類被加載時(shí)執(zhí)行。

2. 核心特點(diǎn)

僅僅是類被加載時(shí),Bean 還未被創(chuàng)建。

3. 代碼示例

@Component
public class MyClass {
    static {
        System.out.println("執(zhí)行靜態(tài)代碼塊")
    }
}

以上就是SpringBoot啟動(dòng)時(shí)執(zhí)行某些操作的8種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot啟動(dòng)時(shí)執(zhí)行某些操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn)

    Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn)

    時(shí)間輪是一種高效的定時(shí)調(diào)度算法,主要用于管理延時(shí)任務(wù)或周期性任務(wù),它通過(guò)一個(gè)環(huán)形數(shù)組(時(shí)間輪)和指針來(lái)實(shí)現(xiàn),將大量定時(shí)任務(wù)分?jǐn)偟焦潭ǖ臅r(shí)間槽中,極大地降低了時(shí)間復(fù)雜度和資源開銷,本文給大家介紹了Java時(shí)間輪調(diào)度算法的代碼實(shí)現(xiàn),需要的朋友可以參考下
    2025-03-03
  • springBoot使用JdbcTemplate代碼實(shí)例

    springBoot使用JdbcTemplate代碼實(shí)例

    這篇文章主要介紹了springBoot使用JdbcTemplate代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 使用Jenkins來(lái)構(gòu)建SVN+Maven項(xiàng)目的實(shí)現(xiàn)

    使用Jenkins來(lái)構(gòu)建SVN+Maven項(xiàng)目的實(shí)現(xiàn)

    這篇文章主要介紹了使用Jenkins來(lái)構(gòu)建SVN+Maven項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • spring注解@SneakyThrows用法及說(shuō)明

    spring注解@SneakyThrows用法及說(shuō)明

    @SneakyThrows是Lombok提供的一個(gè)注解,用于消除顯式拋出或捕獲受檢異常的模板代碼,使用該注解后,編譯器會(huì)自動(dòng)生成try-catch塊來(lái)捕獲這些異常,從而使代碼更加簡(jiǎn)潔和易讀
    2025-12-12
  • Java package編譯亂碼問(wèn)題解決

    Java package編譯亂碼問(wèn)題解決

    這篇文章主要介紹了Java package編譯亂碼問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mybatis在sqlite中無(wú)法讀寫byte[]類問(wèn)題的解決辦法

    Mybatis在sqlite中無(wú)法讀寫byte[]類問(wèn)題的解決辦法

    這篇文章主要給大家介紹了關(guān)于Mybatis在sqlite中無(wú)法讀寫byte[]類問(wèn)題的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Spring中@Value注解的使用方法詳解

    Spring中@Value注解的使用方法詳解

    這篇文章主要介紹了Spring中@Value注解的使用方法詳解,在spring項(xiàng)目中必不可少的就是讀取配置文件,那么讀取配置文件就有兩種方式,一種就是使用Spring中@Value注解,還有一種是使用SpringBoot中的@ConfigurationProperties注解,需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)集合和Excel文件相互轉(zhuǎn)換

    Java實(shí)現(xiàn)集合和Excel文件相互轉(zhuǎn)換

    本文主要介紹了使用Java和ApachePOI庫(kù)將集合轉(zhuǎn)化為包含合并單元格的Excel文件,及從Excel文件流中讀取并轉(zhuǎn)化為集合,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-08-08
  • Java JDK17沒(méi)有源碼的問(wèn)題及解決

    Java JDK17沒(méi)有源碼的問(wèn)題及解決

    這篇文章主要介紹了Java JDK17沒(méi)有源碼的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明

    關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明

    這篇文章主要介紹了關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評(píng)論

庐江县| 招远市| 南丹县| 上饶市| 黄骅市| 中阳县| 棋牌| 舞钢市| 金乡县| 萨嘎县| 米林县| 德钦县| 张家界市| 兴化市| 临猗县| 汨罗市| 甘南县| 务川| 上林县| 法库县| 陆川县| 高清| 虞城县| 桃园县| 巴中市| 九龙城区| 芦溪县| 墨玉县| 秦皇岛市| 汕头市| 彝良县| 固始县| 米林县| 台北县| 中超| 五河县| 屏山县| 宁南县| 米脂县| 荔波县| 台北县|