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

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

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

實現(xiàn)方案

一、ApplicationRunner

1. 執(zhí)行時機

SpringBoot 應用完全啟動后。

2. 核心特點

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

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

3. 代碼示例

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

二、CommandLineRunner

1. 執(zhí)行時機

SpringBoot 應用完全啟動后。

2. 核心特點

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

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

3. 代碼示例

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

三、@PostConstruct 注解

1. 執(zhí)行時機

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

2. 核心特點

注解在方法上,使用簡單。

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

3. 代碼示例

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

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

1. 執(zhí)行時機

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

2. 核心特點

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

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

3. 代碼示例

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

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

1. 執(zhí)行時機

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

2. 核心特點

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

這個接口會影響所有的 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本身或一個新的bean實例(可選)
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // 在初始化之后執(zhí)行的邏輯
        System.out.println("After Initialization: " + beanName);
        return bean; // 返回bean本身或一個新的bean實例(可選)
    }
}

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

1. 執(zhí)行時機

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

2. 核心特點

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

這個接口只會執(zhí)行一次,執(zhí)行時機早于 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屬性信息
    }
 
}

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

1. 執(zhí)行時機

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

2. 核心特點

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

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

3. 代碼示例

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

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

1. 執(zhí)行時機

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

2. 核心特點

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

3. 代碼示例

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

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

相關文章

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

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

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

    springBoot使用JdbcTemplate代碼實例

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

    使用Jenkins來構建SVN+Maven項目的實現(xiàn)

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

    spring注解@SneakyThrows用法及說明

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

    Java package編譯亂碼問題解決

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

    Mybatis在sqlite中無法讀寫byte[]類問題的解決辦法

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

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

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

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

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

    Java JDK17沒有源碼的問題及解決

    這篇文章主要介紹了Java JDK17沒有源碼的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 關于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明

    關于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明

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

最新評論

民和| 阳春市| 清远市| 泸西县| 新巴尔虎左旗| 沁阳市| 温宿县| 黄骅市| 若羌县| 林西县| 乌鲁木齐县| 天全县| 扬中市| 商都县| 碌曲县| 凌海市| 黄龙县| 奉化市| 临夏县| 始兴县| 略阳县| 房产| 广州市| 莱西市| 玛多县| 正阳县| 普安县| 马尔康县| 永登县| 五河县| 慈溪市| 西宁市| 左云县| 独山县| 四会市| 云梦县| 河池市| 临海市| 绥中县| 阿克| 犍为县|