首页 > Java > java教程 > 弹簧 - 弹簧启动 - 苹果 - 划分 - 划定的固定订单 - 与与依据相关的方法

弹簧 - 弹簧启动 - 苹果 - 划分 - 划定的固定订单 - 与与依据相关的方法

Patricia Arquette
发布: 2025-01-29 20:06:13
原创
523 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板