当前位置: 首页 > article >正文

Spring Bean的生命周期执行流程

Spring Bean的生命周期执行流程涵盖了从Bean的创建到销毁的整个过程,以下是详细的执行流程:

一、创建前准备阶段

  1. Bean定义阶段
    • Spring容器启动,读取配置文件(如XML文件、Java注解或Java配置类)并解析配置元数据。
    • 解析完成后,Spring将Bean定义信息注册到BeanDefinitionRegistry中。BeanDefinitionRegistry是一个存储Bean定义的注册表,它为后续的Bean创建提供了基础信息。BeanDefinition包含了Bean的类名、作用域、依赖关系等元数据。

二、创建实例阶段

  1. 实例化Bean
    • 当需要使用某个Bean时,Spring容器会根据BeanDefinition信息创建Bean的实例。
    • 创建实例的方式有多种,包括使用无参构造函数、有参构造函数、静态工厂方法或实例工厂方法。

三、依赖注入阶段

  1. 注入依赖
    • 在Bean实例创建完成后,Spring会根据BeanDefinition中的依赖关系,将其他Bean或配置值注入到当前Bean的属性中。
    • 注入方式包括构造方法注入、Setter方法注入和字段注入。

四、初始化阶段

  1. Aware接口回调
    • 如果Bean实现了BeanNameAware接口,Spring会调用其setBeanName方法,将Bean在容器中的名称传递给它。
    • 如果Bean实现了BeanFactoryAware接口,Spring会调用其setBeanFactory方法,将当前的BeanFactory传递给它。
    • 如果Bean实现了ApplicationContextAware接口,Spring会调用其setApplicationContext方法,将当前的ApplicationContext传递给它。
  2. BeanPostProcessor前置处理
    • Spring会调用所有注册的BeanPostProcessor的postProcessBeforeInitialization方法,允许开发者在Bean初始化之前对其进行额外的处理。
  3. 初始化Bean
    • 如果Bean实现了InitializingBean接口,Spring会调用其afterPropertiesSet方法进行初始化。
    • 如果Bean定义中指定了自定义初始化方法,Spring会在上述步骤完成后调用该方法。
  4. BeanPostProcessor后置处理
    • Spring会调用所有注册的BeanPostProcessor的postProcessAfterInitialization方法,对Bean进行后置处理。

五、容器缓存阶段

  1. 缓存Bean
    • 完成初始化后,Bean会被缓存到IoC容器中,此时Bean已经处于可用状态,可以被开发者使用。

六、使用阶段

  1. Bean的使用
    • 开发者可以通过IoC容器获取并使用Bean,执行其业务逻辑。

七、销毁阶段

  1. 销毁Bean
    • 当Spring容器关闭时,会对所有的Singleton Bean进行销毁。
    • 如果Bean实现了DisposableBean接口,Spring会调用其destroy方法进行销毁。
    • 如果Bean定义中指定了自定义销毁方法,Spring会在销毁过程中调用该方法。

综上所述,Spring Bean的生命周期执行流程涵盖了从创建前准备、创建实例、依赖注入、初始化、容器缓存、使用到销毁的整个过程。Spring提供了丰富的接口和扩展点,允许开发者在生命周期的各个阶段进行自定义操作,从而实现更灵活和可扩展的Bean管理。


http://www.kler.cn/a/553414.html

相关文章:

  • 解决 Mac 只显示文件大小,不显示目录大小
  • Python--数据类型(中)
  • 【数据挖掘】数据仓库
  • 《深度学习》——自然语言处理(NLP)
  • DeepSeek-R1:使用KTransformers部署(保姆级教程)
  • 月之暗面-KIMI-发布最新架构MoBA
  • 实现历史数据的插入、更新和版本管理-拉链算法
  • 我的2025年计划
  • 红外图像与可见光图像在目标检测时的区别
  • 【数据分析】通过个体和遗址层面的遗传相关性网络分析
  • 浪潮信息元脑R1服务器重塑大模型推理新标准
  • 【核心算法篇十四】《深度解密DeepSeek量子机器学习:VQE算法加速的黑科技与工程实践》
  • MySQL 多表查询技巧和高阶操作实例1
  • Coze扣子怎么使用更强大doubao1.5模型
  • Brave132编译指南 MacOS篇 - 构筑开发环境(二)
  • 优雅地使用枚举参数,让项目Spring Boot项目更加优雅
  • 12.1 Android中协程的基本使用
  • java.2.19
  • Hadoop之HDFS的使用
  • PH热榜 | 2025-02-19