彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法
此文檔詳細詳細介紹了彈簧啟動應用程序bean生命週期的綜合執行順序,每個階段都包含相關方法。
階段1:boottrapping(JVM&Spring Boot初始化)
>-
> JVM初始化:> java虛擬機(JVM)啟動並加載主應用程序類(包含
public static void main(String[] args)
)。 >
- springapplication執行:
SpringApplication.run()
啟動應用程序上下文創建。 (相關方法:SpringApplication.run()
) -
>環境配置:應用程序從系統屬性,環境變量,
application.properties
/yml
文件和命令行參數加載設置。確定主動和默認配置文件。 (相關方法:ConfigurableEnvironment#setActiveProfiles()
,PropertySourcesPropertyResolver#getProperty()
) - > 應用程序類型確定:
Spring標識應用程序類型(Web或Non-Web)。 這確定了適當的應用程序上下文: (Web)或AnnotationConfigServletWebServerApplicationContext
(非WEB)。AnnotationConfigApplicationContext
(相關方法:)SpringApplication#determineWebApplicationType()
- >自動構造和彈簧factorationloader: Spring自動註冊classPath上的依賴項(通過)。
META-INF/spring.factories
(相關方法:)SpringFactoriesLoader#loadFactoryNames()
- >應用程序運行偵聽器: 是觸發的,啟動事件,例如
SpringApplicationRunListeners
>和ApplicationStartingEvent
。ApplicationEnvironmentPreparedEvent
(相關方法:,SpringApplicationRunListeners#starting()
)SpringApplicationRunListeners#environmentPrepared()
階段2:上下文初始化和bean Lifecycle>
- > applicationContext創建:
是創建 的,並且使用ApplicationContext
和@ComponentScan
的註釋掃描bean。@Configuration
(相關方法:)AnnotationConfigApplicationContext#register()
> - bean定義加載:彈簧進程從配置類,XML文件或組件掃描中定義bean定義。 注意:bean實例>還沒有創建。 (相關方法:)
BeanDefinitionRegistry#registerBeanDefinition()
> bean實例化: - bean是使用構造函數注入或工廠方法實例化的。 (相關方法:)
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
>生命週期的bean處理: - bean實現生命週期接口(例如,,,
BeanNameAware
)。BeanFactoryAware
(相關方法:EnvironmentAware
,,BeanNameAware#setBeanName()
,BeanClassLoaderAware#setBeanClassLoader()
,BeanFactoryAware#setBeanFactory()
,等)EnvironmentAware#setEnvironment()
EmbeddedValueResolverAware#setEmbeddedValueResolver()
有條件的豆類和配置文件: bean標記了 或 - >的豆類,並根據指定條件或活動配置文件進行了評估並有條件地創建。 (相關方法:,
@Conditional
)@Profile
Condition#matches()
ConfigurableEnvironment#getActiveProfiles()
>執行前啟動: >方法。 - >
>自定義初始化:
BeanPostProcessor#postProcessBeforeInitialization()
>自定義初始化邏輯是使用 >, - 或
>屬性執行的。 (相關方法: @PostConstruct
,InitializingBean.afterPropertiesSet()
)init-method
@Bean
>InitializingBean#afterPropertiesSet()
後期處理後處理:@PostConstruct
>方法。 >
-
階段3:應用程序啟動完成
BeanPostProcessor#postProcessAfterInitialization()
- > applicationContext刷新:
ApplicationContext
是刷新的,完成了依賴注入。ContextRefreshedEvent
被解僱。 (相關方法:AbstractApplicationContext#refresh()
) - >>嵌入式Web服務器啟動(如果適用):
如果是Web應用程序,則嵌入式服務器(Tomcat,Jetty,Undertow)啟動並綁定到端口。 執行 和ServletContextInitializer
(對於基於Servlet的應用程序)。WebApplicationInitializer
(相關方法:)ConfigurableWebServerApplicationContext#start()
執行 > - commandlinernerner&applicationRunner執行:
或>執行,執行啟動後任務。 CommandLineRunner
(相關方法:ApplicationRunner
,)CommandLineRunner#run()
ApplicationRunner#run()
> applicationreadreadevent: - 被觸發,表明該應用程序已完全初始化並準備好處理請求。 (相關方法:
ApplicationReadyEvent
)ApplicationListener#onApplicationEvent(ApplicationReadyEvent)
- 關閉過程開始,由控制。 (相關方法:
spring.lifecycle.timeout-per-shutdown-phase
)SpringApplication#setRegisterShutdownHook(true)
前毀滅處理: -
>執行方法。
DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
自定義清理: - >,方法或
>屬性執行的。 DisposableBean.destroy()
(相關方法:@PreDestroy
,destroy-method
)@Bean
DisposableBean#destroy()
@PreDestroy
applicationContext閉合: >。 - (相關方法:)
ApplicationContext
ContextClosedEvent
>自定義退出代碼:ConfigurableApplicationContext#close()
>可用於設置自定義出口代碼(使用 )。 - (相關方法:)
SpringApplication.exit()
ExitCodeGenerator
SpringApplication#exit()
階段5:高級註意事項 > - 懶惰的初始化(
@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()
- > boottrapping:
jvm→→auto-configuration→上下文創建 SpringApplication.run()
> 上下文初始化: - bean實例化→生命週期鉤→依賴式註入 >
- 應用程序啟動: Web服務器啟動→跑步者執行→應用程序Ready
> 關機階段: - 預擊擊回調→清理→上下文關閉 這種詳細的故障提供了對Spring Boot Bean生命週期及其執行順序的全面理解。 了解此順序對於調試,優化和擴展Spring Boot應用程序至關重要。
>
- 優雅的關閉:
執行順序摘要:
- >
以上是彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
