此文檔詳細詳細介紹了彈簧啟動應用程序bean生命週期的綜合執行順序,每個階段都包含相關方法。
階段1:boottrapping(JVM&Spring Boot初始化)
>public static void main(String[] args)
)。 SpringApplication.run()
啟動應用程序上下文創建。 (相關方法:SpringApplication.run()
)application.properties
/yml
文件和命令行參數加載設置。確定主動和默認配置文件。 (相關方法:ConfigurableEnvironment#setActiveProfiles()
,PropertySourcesPropertyResolver#getProperty()
)
AnnotationConfigServletWebServerApplicationContext
(非WEB)。 AnnotationConfigApplicationContext
(相關方法:)SpringApplication#determineWebApplicationType()
META-INF/spring.factories
(相關方法:)SpringFactoriesLoader#loadFactoryNames()
SpringApplicationRunListeners
>和ApplicationStartingEvent
。 ApplicationEnvironmentPreparedEvent
(相關方法:,SpringApplicationRunListeners#starting()
)SpringApplicationRunListeners#environmentPrepared()
階段2:上下文初始化和bean Lifecycle>
ApplicationContext
和@ComponentScan
的註釋掃描bean。 @Configuration
(相關方法:)AnnotationConfigApplicationContext#register()
BeanDefinitionRegistry#registerBeanDefinition()
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
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
>方法。 BeanPostProcessor#postProcessAfterInitialization()
ApplicationContext
是刷新的,完成了依賴注入。 ContextRefreshedEvent
被解僱。 (相關方法:AbstractApplicationContext#refresh()
)
ServletContextInitializer
(對於基於Servlet的應用程序)。 WebApplicationInitializer
(相關方法:)ConfigurableWebServerApplicationContext#start()
執行CommandLineRunner
(相關方法:ApplicationRunner
,)CommandLineRunner#run()
ApplicationRunner#run()
> 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#getObject()
)HealthIndicator#health()
spring.main.lazy-initialization=true
ApplicationListener
允許連接到啟動/關閉事件。 (相關方法:)ApplicationListener#onApplicationEvent()
執行順序摘要:
SpringApplication.run()
>以上是彈簧 - 彈簧啟動 - 蘋果 - 劃分 - 劃定的固定訂單 - 與與依據相關的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!