springboot啟動(dòng)過(guò)程中常用的回調(diào)示例詳解
1.介紹
springboot提供非常豐富回調(diào)接口,利用這些接口可以做非常多的事情,對(duì)于一些常用的回調(diào)接口進(jìn)行介紹
2.常用的拓展接口
1.ApplicationContextInitializer
2.ApplicationListener
3.ApplicationRunner
4.CommandLineRunner
3.實(shí)例:
1.ApplicationContextInitializer接口是在spring容器初初始化之前調(diào)用的
創(chuàng)建MyApplicationContextInitializer
類實(shí)現(xiàn)ApplicationContextInitializer
接口
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("MyApplicationContextInitializer啟動(dòng)。。。。。。。。。。"); } }
因?yàn)樵摻涌谠谌萜鞒跏蓟八宰⒔馐菦](méi)有用的,在mian方法中初始化MyApplicationContextInitializer
類
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(Application.class); springApplication.addInitializers(new MyApplicationContextInitializer()); springApplication.run(args); //SpringApplication.run(Application.class, args); } }
2.ApplicationListener監(jiān)聽(tīng)器,這個(gè)接口可以根據(jù)不同的事件進(jìn)行不同的觸發(fā)條件
spring容器內(nèi)置觸發(fā)事件:
- ContextRefreshedEvent:初始化或刷新ApplicationContext時(shí)引發(fā)的事件
- ContextStartedEvent:ApplicationContext啟動(dòng)時(shí)引發(fā)的事件
- ContextStoppedEvent:ApplicationContext停止時(shí)引發(fā)的事件
- ContextClosedEvent:ApplicationContext關(guān)閉時(shí)引發(fā)的事件
代碼示例:
@Component public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { System.out.println("MyApplicationListener。。。。。。。。。。"); } }
注意:spring也有ApplicationEvent接口可以自定義事件
3.ApplicationRunner觸發(fā)時(shí)機(jī)在容器加載完之后
ublic class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("MyApplicationRunner。。。。。。。。。。"); } } 源碼: /** *用于指示 bean 包含在SpringApplication時(shí)應(yīng)該運(yùn)行的SpringApplication *多個(gè)ApplicationRunner bean 可以在同一個(gè)應(yīng)用程序上下文中定義,并且可以使用Ordered接口或@Order注釋進(jìn)行排序。 */ public interface ApplicationRunner { /** * 傳入的應(yīng)用程序參數(shù) */ void run(ApplicationArguments args) throws Exception; }
4.CommandLineRunner
功能基本與ApplicationRunner
一致,區(qū)別在于,接口的參數(shù)類型,這里傳遞的是原始String 數(shù)組,拓展性ApplicationRunner
會(huì)更好一點(diǎn)
@Component public class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("MyCommandLineRunner。。。。。。。。。。"); } }
4.其他拓展接口:
1.InstantiationAwareBeanPostProcessor
添加實(shí)例化前回調(diào)的BeanPostProcessor子接口,以及實(shí)例化后但在設(shè)置顯式屬性或發(fā)生自動(dòng)裝配之前的回調(diào)。
通常用于抑制特定目標(biāo) bean 的默認(rèn)實(shí)例化,例如創(chuàng)建具有特殊 TargetSources 的代理(池目標(biāo)、延遲初始化目標(biāo)等),或?qū)崿F(xiàn)其他注入策略,如字段注入。
注意:此接口為專用接口,主要供框架內(nèi)部使用。 建議盡可能實(shí)現(xiàn)普通的BeanPostProcessor接口,或者從InstantiationAwareBeanPostProcessorAdapter派生,以屏蔽對(duì)該接口的擴(kuò)展。
2.SmartInstantiationAwareBeanPostProcessor
InstantiationAwareBeanPostProcessor接口的擴(kuò)展,添加了用于預(yù)測(cè)已處理 bean 的最終類型的回調(diào)。
注意:此接口為專用接口,主要供框架內(nèi)部使用。 通常,應(yīng)用程序提供的后處理器應(yīng)該簡(jiǎn)單地實(shí)現(xiàn)普通的BeanPostProcessor接口或派生自InstantiationAwareBeanPostProcessorAdapter類。
到此這篇關(guān)于springboot啟動(dòng)過(guò)程中常用的回調(diào)的文章就介紹到這了,更多相關(guān)springboot啟動(dòng)過(guò)程回調(diào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用@DS輕松解決動(dòng)態(tài)數(shù)據(jù)源的問(wèn)題
這篇文章主要介紹了使用@DS輕松解決動(dòng)態(tài)數(shù)據(jù)源的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串
Java計(jì)算無(wú)重復(fù)字符的最長(zhǎng)子串是一種常見(jiàn)的字符串處理算法,它的目的是找出一個(gè)字符串中無(wú)重復(fù)字符的最長(zhǎng)子串。該算法可以很好地解決一些字符串處理問(wèn)題,比如尋找字符串中重復(fù)字符的位置,以及計(jì)算字符串中無(wú)重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度。2023-02-02SpringBoot使用Redisson實(shí)現(xiàn)分布式鎖(秒殺系統(tǒng))
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用Redisson實(shí)現(xiàn)分布式鎖,秒殺系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12Spring實(shí)現(xiàn)聲明式事務(wù)的方法詳解
這篇文章主要介紹了Spring實(shí)現(xiàn)聲明式事務(wù)的方法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01