8.Bean生命周期

2023-10-01  本文已影响0人  wyh001

一个Bean从创建到销毁,会经过一系列的生命周期阶段,每个阶段spring都提供了方式让我们能够介入,从而可以修改bean的配置、状态和行为等。

bean构建触发时机

  1. 应用上下文启动过程中
  2. 应用上下文运行中
bean生命周期.png

完整流程

  1. InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation

  2. 实例化

  3. MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition

    • 可以修改初始化该bean即将使用的配置元数据
  4. InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation

  5. 处理属性自动注入模式,查找依赖并填充到BeanDefinitionPropertyValues

    • 根据javabean属性元数据,找到需要自动注入的属性
    • 调用IoC容器解析依赖值
    • 将依赖值增加到PropertyValues
  6. InstantiationAwareBeanPostProcessor#postProcessProperties

    • 可以替换初始化该bean即将使用的配置元数据

    • @Autowired

    • @Value

    • @Resource

  7. Set方法注入:applyPropertyValues

    • 使用BeanDefinitionPropertyValues初始化bean属性
  8. 调用bean实现的Aware方法

    • BeanNameAware
    • BeanFactoryAware
  9. BeanPostProcessor#postProcessBeforeInitialization

    • PostConstruct
  10. 调用初始化方法

    • InitializingBean#afterPropertiesSet
    • 自定义方法
  11. BeanPostProcessor#postProcessAfterInitialization

  12. SmartInitializingSingleton#afterSingletonsInstantiated

    • 用于非延迟初始化地单例bean
  13. DisposableBeanAdapter 销毁方法适配器

    • DestructionAwareBeanPostProcessor#postProcessBeforeDestruction

      • @PreDestroy
    • DisposableBean

    • 自定义销毁方法

      • destroy()
      • close()
      • shutdown()
      • 其他

感知上下文生命周期

  1. 通过监听上下文生命周期事件

    • ContextRefreshedEvent
    • ContextClosedEvent
    • ContextStartedEvent
    • ContextStoppedEvent
  2. 实现Lifecycle接口

    提供精确控制bean服务的方式,如启动、暂停等

    • Lifecycle
    • SmartLifecycle
上一篇 下一篇

猜你喜欢

热点阅读