此文档详细详细介绍了弹簧启动应用程序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中文网其他相关文章!