首頁 Java java教程 彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法

彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法

Jan 29, 2025 pm 08:06 PM

spring-: spring-boot-application-bean-lifecycle-comprehensive-execution-order-with-related-methods

此文檔詳細詳細介紹了彈簧啟動應用程序bean生命週期的綜合執行順序,每個階段都包含相關方法。

階段1:boottrapping(JVM&Spring Boot初始化)

>
  1. > JVM初始化:> java虛擬機(JVM)啟動並加載主應用程序類(包含public static void main(String[] args))。
  2. >
  3. springapplication執行:SpringApplication.run()啟動應用程序上下文創建。 (相關方法:SpringApplication.run()
  4. >環境配置:應用程序從系統屬性,環境變量,application.properties/yml文件和命令行參數加載設置。確定主動和默認配置文件。 (相關方法:ConfigurableEnvironment#setActiveProfiles()PropertySourcesPropertyResolver#getProperty()
  5. > 應用程序類型確定: Spring標識應用程序類型(Web或Non-Web)。 這確定了適當的應用程序上下文:(Web)或AnnotationConfigServletWebServerApplicationContext(非WEB)。 AnnotationConfigApplicationContext(相關方法:SpringApplication#determineWebApplicationType()
  6. >自動構造和彈簧factorationloader: Spring自動註冊classPath上的依賴項(通過)。 META-INF/spring.factories(相關方法:SpringFactoriesLoader#loadFactoryNames()
  7. >應用程序運行偵聽器: 是觸發的,啟動事件,例如SpringApplicationRunListeners>和ApplicationStartingEventApplicationEnvironmentPreparedEvent(相關方法:SpringApplicationRunListeners#starting()SpringApplicationRunListeners#environmentPrepared()

階段2:上下文初始化和bean Lifecycle>

  1. > applicationContext創建:是創建的,並且使用ApplicationContext@ComponentScan的註釋掃描bean。 @Configuration(相關方法:AnnotationConfigApplicationContext#register()
  2. >
  3. bean定義加載:彈簧進程從配置類,XML文件或組件掃描中定義bean定義。 注意:bean實例>還沒有創建。 (相關方法:BeanDefinitionRegistry#registerBeanDefinition()
  4. > bean實例化:
  5. bean是使用構造函數注入或工廠方法實例化的。 (相關方法:InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
  6. >生命週期的bean處理:
  7. bean實現生命週期接口(例如,BeanNameAware)。 BeanFactoryAware(相關方法:EnvironmentAwareBeanNameAware#setBeanName()BeanClassLoaderAware#setBeanClassLoader()BeanFactoryAware#setBeanFactory(),等) EnvironmentAware#setEnvironment() EmbeddedValueResolverAware#setEmbeddedValueResolver()有條件的豆類和配置文件: bean標記了
  8. >的豆類,並根據指定條件或活動配置文件進行了評估並有條件地創建。 (相關方法:@Conditional@Profile Condition#matches()ConfigurableEnvironment#getActiveProfiles()>執行前啟動:
  9. >方法。
  10. > >自定義初始化:BeanPostProcessor#postProcessBeforeInitialization()>自定義初始化邏輯是使用
  11. >,
  12. >屬性執行的。 (相關方法:@PostConstructInitializingBean.afterPropertiesSet()init-method@Bean > InitializingBean#afterPropertiesSet()後期處理後處理:@PostConstruct>方法。
  13. >
  14. 階段3:應用程序啟動完成BeanPostProcessor#postProcessAfterInitialization()
    1. > applicationContext刷新:ApplicationContext是刷新的,完成了依賴注入。 ContextRefreshedEvent被解僱。 (相關方法:AbstractApplicationContext#refresh()
    2. >>嵌入式Web服務器啟動(如果適用):如果是Web應用程序,則嵌入式服務器(Tomcat,Jetty,Undertow)啟動並綁定到端口。 執行ServletContextInitializer(對於基於Servlet的應用程序)。 WebApplicationInitializer(相關方法:ConfigurableWebServerApplicationContext#start() 執行
    3. >
    4. commandlinernerner&applicationRunner執行:或>執行,執行啟動後任務。 CommandLineRunner(相關方法:ApplicationRunnerCommandLineRunner#run()ApplicationRunner#run() >
    5. applicationreadreadevent:
    6. 被觸發,表明該應用程序已完全初始化並準備好處理請求。 (相關方法:ApplicationReadyEventApplicationListener#onApplicationEvent(ApplicationReadyEvent)
    階段4:豆類破壞和應用程序關閉

    >

      優雅的關閉:
    1. 關閉過程開始,由控制。 (相關方法:spring.lifecycle.timeout-per-shutdown-phaseSpringApplication#setRegisterShutdownHook(true)
    2. 前毀滅處理:
    3. >執行方法。 DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
    4. 自定義清理:自定義清理邏輯是使用
    5. >,方法或>屬性執行的。 DisposableBean.destroy()(相關方法:@PreDestroydestroy-method@Bean DisposableBean#destroy()@PreDestroy applicationContext閉合: 關閉,觸發
    6. >。
    7. (相關方法:ApplicationContext ContextClosedEvent>自定義退出代碼:ConfigurableApplicationContext#close()>可用於設置自定義出口代碼(使用
    8. )。
    9. (相關方法:SpringApplication.exit() ExitCodeGenerator SpringApplication#exit()階段5:高級註意事項
    10. >
      • 懶惰的初始化(@Lazy): bean僅在訪問時才能創建。 (相關方法:DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
      • >循環依賴性處理:使用@Lazy@DependsOn,setter注入或管理循環依賴性。 AbstractAutowireCapableBeanFactory#doResolveDependency()(相關方法:
      • FactoryBean機制:允許創建動態豆。 (相關方法:FactoryBean#getObject()
      • > 春季啟動執行器(如果啟用):提供用於監視和管理的端點(/執行器/健康,/執行器/關閉,/cartuator/cortuator/量表)。 (相關方法:HealthIndicator#health()
      • 性能優化:>用>和調整垃圾收集的啟動時間。 spring.main.lazy-initialization=true
      • >自定義應用程序偵聽器():ApplicationListener允許連接到啟動/關閉事件。 (相關方法:ApplicationListener#onApplicationEvent()

      執行順序摘要:>

        >
      1. > boottrapping: jvm→→auto-configuration→上下文創建 SpringApplication.run()>
      2. 上下文初始化:
      3. bean實例化→生命週期鉤→依賴式註入 >
      4. 應用程序啟動: Web服務器啟動→跑步者執行→應用程序Ready >
      5. 關機階段:
      6. 預擊擊回調→清理→上下文關閉
      7. 這種詳細的故障提供了對Spring Boot Bean生命週期及其執行順序的全面理解。 了解此順序對於調試,優化和擴展Spring Boot應用程序至關重要。

以上是彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java ArrayList中自定義對象的查找策略與常見陷阱 Java ArrayList中自定義對象的查找策略與常見陷阱 Sep 05, 2025 am 11:09 AM

在Java中,直接使用ArrayList.contains()方法查找自定義對象時,若傳入的類型與列表中元素類型不匹配或未正確重寫equals()方法,將無法得到預期結果。本文將詳細探討contains()的工作原理,並介紹通過迭代、Java 8 Stream API等多種方式,高效、準確地在ArrayList中查找自定義對象的正確方法,同時提供性能優化建議。

如何在Java中創建文件 如何在Java中創建文件 Sep 21, 2025 am 03:54 AM

UseFile.createNewFile()tocreateafileonlyifitdoesn’texist,avoidingoverwriting;2.PreferFiles.createFile()fromNIO.2formodern,safefilecreationthatfailsifthefileexists;3.UseFileWriterorPrintWriterwhencreatingandimmediatelywritingcontent,withFileWriterover

Java中的功能接口是什麼? Java中的功能接口是什麼? Sep 02, 2025 am 02:07 AM

FunctionInterFaceSinjavaareInterfacesWithExactlyOoneAbstractMethod,ServingasThefoundationForlambDaexpressions andMethodReferences,EnablingFunctionalProgrampramprammingFeatures; sealincludedeDefault,static,static,static,andObjectClassMethodClassMethodSwithOdswithOutBreakingThesingThesingThesingThesingLele-abstrac

如何在Java中的類Path中添加JAR文件? 如何在Java中的類Path中添加JAR文件? Sep 21, 2025 am 05:09 AM

使用-cp參數可將JAR加入類路徑,使JVM能加載其內類與資源,如java-cplibrary.jarcom.example.Main,支持多JAR用分號或冒號分隔,也可通過CLASSPATH環境變量或MANIFEST.MF配置。

您如何在Java中的數組中搜索元素? 您如何在Java中的數組中搜索元素? Sep 02, 2025 am 02:03 AM

在Java中搜索數組元素的最佳方法取決於數組是否已排序及性能需求:對於未排序的小數組,使用線性搜索(時間複雜度O(n));對於已排序數組,使用Arrays.binarySearch()(時間複雜度O(logn));若使用對像數組且追求簡潔,可轉為List後調用contains()或indexOf();在Java8 中偏好函數式風格時,可使用Arrays.stream().anyMatch()實現簡潔的一行代碼,但性能略低於傳統循環,因此選擇方法需權衡性能、可讀性和數據是否排序的情況。

使用Java服務提供商界面(SPI)構建可擴展應用程序 使用Java服務提供商界面(SPI)構建可擴展應用程序 Sep 21, 2025 am 03:50 AM

JavaSPI是JDK內置的服務發現機制,通過ServiceLoader實現面向接口的動態擴展。 1.定義服務接口並在META-INF/services/下創建以接口全名為名的文件,寫入實現類全限定名;2.使用ServiceLoader.load()加載實現類,JVM會自動讀取配置並實例化;3.設計時應明確接口契約、支持優先級與條件加載、提供默認實現;4.應用場景包括多支付渠道接入和插件化校驗器;5.注意性能、類路徑、異常隔離、線程安全和版本兼容性;6.在Java9 可結合模塊系統使用provid

如何在Java中實現接口? 如何在Java中實現接口? Sep 18, 2025 am 05:31 AM

使用implements關鍵字實現接口,類需提供接口中所有方法的具體實現,支持多接口時用逗號分隔,確保方法為public,Java8後默認和靜態方法無需重寫。

了解Java仿製藥和通配符 了解Java仿製藥和通配符 Sep 20, 2025 am 01:58 AM

Javagenericsprovidecompile-timetypesafetyandeliminatecastingbyallowingtypeparametersonclasses,interfaces,andmethods;wildcards(?,?extendsType,?superType)handleunknowntypeswithflexibility.1.UseunboundedwildcardwhentypeisirrelevantandonlyreadingasObject

See all articles