SpringBoot啟動后執(zhí)行方法的五種實現(xiàn)方式
在 SpringBoot 工程 啟動后, 執(zhí)行方法的五種方式:
1、實現(xiàn) CommandLineRunner 接口
項目初始化完畢后,才會調(diào)用方法,提供服務(wù)
@Component public class StartInit2 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner===================="); } }
2、實現(xiàn) ApplicationRunner 接口
同 CommandLineRunner。只是傳參格式不一樣。CommandLineRunner:沒有任何限制;ApplicationRunner:key-value
@Component public class StartInit3 implements ApplicationRunner { @Override public void run(ApplicationArguments args) { System.out.println("ApplicationRunner================="); } }
3、實現(xiàn) ApplicationListener 接口
項目初始化完畢后,才會調(diào)用方法,提供服務(wù)。注意監(jiān)聽的事件,通常是 ApplicationStartedEvent 或者 ApplicationReadyEvent,其他的事件可能無法注入 bean。
@Component public class StartInit4 implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("ApplicationListener================ApplicationStartedEvent"); } }
- 如果監(jiān)聽的是
ApplicationStartedEvent
事件,則 ApplicationListener 一定會在 CommandLineRunner 和 ApplicationRunner 之前執(zhí)行; - 如果監(jiān)聽的是
ApplicationReadyEvent
事件,則 ApplicationListener 一定會在 CommandLineRunner 和 ApplicationRunner 之后執(zhí)行;
順序:
默認是 ApplicationRunner
先執(zhí)行,如果雙方指定了@Order
則按照 @Order
的大小順序執(zhí)行,小的先執(zhí)行。
原理:
- SpringApplication 的run方法會執(zhí)行afterRefresh方法。
- afterRefresh方法會執(zhí)行callRunners方法。
- callRunners方法會調(diào)用所有實現(xiàn)ApplicationRunner和CommondLineRunner接口的方法callRunners方法會調(diào)用所有實現(xiàn)ApplicationRunner和CommondLineRunner接口的方法
4、@PostConstruct 注解
在項目初始化過程中,就會調(diào)用此方法。如果業(yè)務(wù)邏輯執(zhí)行很耗時,可能會導(dǎo)致項目啟動失敗。
@Component public class StartInit { @PostConstruct public void init() { System.out.println("@PostConstruct==============================="); } }
5、實現(xiàn) InitializingBean 接口
項目啟動時,調(diào)用此方法
@Component public class StartInit6 implements InitializingBean { @Override public void afterPropertiesSet() { System.out.println("InitializingBean===================="); } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter)
本文主要介紹了Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter),就像文章標題所說的,SpringSecurity已經(jīng)廢棄了繼承WebSecurityConfigurerAdapter的配置方式,下面就來詳細的介紹一下,感興趣的可以了解一下2023-12-12Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用
今天小編就為大家分享一篇關(guān)于Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12Java過濾器doFilter里chain.doFilter()函數(shù)的理解
這篇文章主要介紹了Java過濾器doFilter里chain.doFilter()函數(shù)的理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Java安全 ysoserial CommonsCollections2示例分析
這篇文章主要為大家介紹了Java安全 ysoserial CommonsCollections2示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11SpringBoot接口防抖(防重復(fù)提交)的實現(xiàn)方案
所謂防抖,一是防用戶手抖,二是防網(wǎng)絡(luò)抖動,在Web系統(tǒng)中,表單提交是一個非常常見的功能,如果不加控制,容易因為用戶的誤操作或網(wǎng)絡(luò)延遲導(dǎo)致同一請求被發(fā)送多次,所以本文給大家介紹了SpringBoot接口防抖(防重復(fù)提交)的實現(xiàn)方案,需要的朋友可以參考下2024-04-04淺談靜態(tài)變量、成員變量、局部變量三者的區(qū)別
下面小編就為大家?guī)硪黄獪\談靜態(tài)變量、成員變量、局部變量三者的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09