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

SpringBoot中SmartLifecycle的使用解析

 更新時間:2023年11月15日 08:48:12   作者:阿孟呀  
這篇文章主要介紹了SpringBoot中SmartLifecycle的使用解析,SmartLifecycle是一個擴展了Lifecycle接口,可以跟蹤spring容器ApplicationContext刷新或者關閉的接口,實現(xiàn)該接口的實現(xiàn)類有特定的執(zhí)行順序,需要的朋友可以參考下

前言

SmartLifecycle是一個擴展了Lifecycle接口,可以跟蹤spring容器ApplicationContext刷新或者關閉的接口,實現(xiàn)該接口的實現(xiàn)類有特定的執(zhí)行順序。

當ApplicationContext刷新時,所有bean都加載和初始化完成后,根據(jù)isAutoStartup和isRunning判斷是否自動執(zhí)行start()

1.新建TestSmartLifecycle類

public class TestSmartLifecycle implements SmartLifecycle {
   
  @Override
    public void start() {
        System.out.println("TestSmartLifecycle is start");
    }
//SmartLifecycle組件停止后的回調(diào),程序被異步關閉
    @Override
    public void stop() {
        System.out.println("SmartLifecycle is stop");
    }
//為false,并且isAutoStartup為true,執(zhí)行start方法
//為true,執(zhí)行stop方法。
    @Override
    public boolean isRunning() {
        return false;
    }
//如果為true,實現(xiàn)了SmartLifecycle 接口的組件,能再ApplicationContext已經(jīng)刷新的時候,自動執(zhí)行start方法,
    @Override
    public boolean isAutoStartup() {
        return true;
    }
//當running為true時,再應用關閉時會執(zhí)行stop(Runnable callback)方法,
如果再執(zhí)行完stop后,running沒有設置為false時,應用會卡住一段時間,無法退出
    @Override
    public void stop(Runnable callback) {
        System.out.println("TestSmartLifecycle is stop");
        callback.run();
    }
 
    @Override
    public int getPhase() {
        return 0;
    }
}

2.配置Bean

@Configuration
public class TestConfiguration {
 
    @Bean
    TestSmartLifecycle testSmartLifecycle(){
        return new TestSmartLifecycle();
    }
}

3.debugger啟動應用程序

可以看見如下的調(diào)用鏈,大致是SpringApplication.run(CommonsTestApplication.class, args)-->refreshContext-->refresh-->startBeans-->start,其中,再startBean中獲取了所有實現(xiàn)SmartLifecycle的非懶加載的bean,并再start方法中,調(diào)用對應實現(xiàn)bean的start方法,執(zhí)行相應的邏輯,具體可看下面截圖。

private void startBeans(boolean autoStartupOnly) {
		Map<String, Lifecycle> lifecycleBeans = getLifecycleBeans();
		Map<Integer, LifecycleGroup> phases = new HashMap<>();
		lifecycleBeans.forEach((beanName, bean) -> {
			if (!autoStartupOnly || (bean instanceof SmartLifecycle && ((SmartLifecycle) bean).isAutoStartup())) {
				int phase = getPhase(bean);
				LifecycleGroup group = phases.get(phase);
				if (group == null) {
					group = new LifecycleGroup(phase, this.timeoutPerShutdownPhase, lifecycleBeans, autoStartupOnly);
					phases.put(phase, group);
				}
				group.add(beanName, bean);
			}
		});
		if (!phases.isEmpty()) {
			List<Integer> keys = new ArrayList<>(phases.keySet());
			Collections.sort(keys);
			for (Integer key : keys) {
				phases.get(key).start();
			}
		}
	}

到此這篇關于SpringBoot中SmartLifecycle的使用解析的文章就介紹到這了,更多相關SmartLifecycle的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Java面向?qū)ο笾械睦^承

    詳解Java面向?qū)ο笾械睦^承

    這篇文章主要介紹了詳解Java面向?qū)ο笾械睦^承,繼承提高代碼的復用性:通過繼承,子類可以直接使用父類的屬性和方法,不需要重復定義,需要的朋友可以參考下
    2023-05-05
  • Java實現(xiàn)發(fā)送HTML內(nèi)容并帶附件的電子郵件

    Java實現(xiàn)發(fā)送HTML內(nèi)容并帶附件的電子郵件

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)發(fā)送HTML內(nèi)容并帶附件的電子郵件,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2025-01-01
  • 使用@Autowired注解有錯誤提示的解決

    使用@Autowired注解有錯誤提示的解決

    這篇文章主要介紹了使用@Autowired注解有錯誤提示的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot實現(xiàn)Markdown語法轉(zhuǎn)HTML標簽的詳細步驟

    SpringBoot實現(xiàn)Markdown語法轉(zhuǎn)HTML標簽的詳細步驟

    這篇文章主要介紹了SpringBoot實現(xiàn)Markdown轉(zhuǎn)HTML的步驟,涵蓋項目配置、測試語法擴展(自動鏈接、表情、表格等)、解決GitLab和腳注問題,并添加自定義解析器以確保正確解析,需要的朋友可以參考下
    2025-09-09
  • springboot rocketmq配置生產(chǎn)者和消息者的步驟

    springboot rocketmq配置生產(chǎn)者和消息者的步驟

    本文介紹了如何在Spring Boot中集成RocketMQ,包括添加依賴、配置application.yml、創(chuàng)建生產(chǎn)者和消費者,并展示了如何發(fā)送和接收消息,感興趣的朋友一起看看吧
    2025-03-03
  • Jenkins安裝多個jdk版本并在項目中選擇對應jdk版本

    Jenkins安裝多個jdk版本并在項目中選擇對應jdk版本

    在使用jenkins構(gòu)建項目時會遇到不同的job需要配置不同版本的jdk,下面這篇文章主要給大家介紹了關于Jenkins安裝多個jdk版本并在項目中選擇對應jdk版本的相關資料,需要的朋友可以參考下
    2024-03-03
  • 關于Mybatis的mapper接口函數(shù)重載問題

    關于Mybatis的mapper接口函數(shù)重載問題

    這篇文章主要介紹了關于Mybatis的mapper接口函數(shù)重載問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Maven項目引用第三方jar包找不到類ClassNotFoundException

    Maven項目引用第三方jar包找不到類ClassNotFoundException

    這篇文章主要為大家介紹了Maven項目引用第三方jar包找不到類ClassNotFoundException解決及原因分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • SpringBoot配置發(fā)送Email的示例代碼

    SpringBoot配置發(fā)送Email的示例代碼

    本篇文章主要介紹了SpringBoot配置發(fā)送Email的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 詳解Java回環(huán)屏障CyclicBarrier

    詳解Java回環(huán)屏障CyclicBarrier

    這篇文章主要介紹了Java回環(huán)屏障CyclicBarrier的相關資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09

最新評論

盐城市| 本溪市| 西充县| 永州市| 丹巴县| 嵊州市| 永寿县| 青冈县| 万州区| 东至县| 前郭尔| 阿拉尔市| 新昌县| 卓资县| 平陆县| 建德市| 青阳县| 潼关县| 高青县| 潞西市| 都江堰市| 三穗县| 河源市| 菏泽市| 鄂尔多斯市| 饶阳县| 洛隆县| 临朐县| 怀集县| 图木舒克市| 甘肃省| 鹿泉市| 四子王旗| 榆林市| 托里县| 邮箱| 西城区| 驻马店市| 南皮县| 望都县| 秦安县|