彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法
此文檔詳細詳細介紹了彈簧啟動應用程序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工具

Undress AI Tool
免費脫衣圖片

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

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

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

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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