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

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

Patricia Arquette
Patricia Arquette原創
2025-01-29 20:06:13528瀏覽

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