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

Spring Bean 生命周期

Spring Bean 生命周期是 Spring 框架中一个非常重要的概念,它描述了一个 Bean 从创建到销毁的完整过程。这个生命周期可以分为五个主要阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、容器缓存阶段和销毁实例阶段。下面我们将详细介绍每个阶段的作用,并通过生活中的例子来帮助理解。

创建前准备阶段

定义与作用: 在这一阶段,Spring 容器会解析配置文件或注解,查找并加载需要被管理的 Bean 的相关信息。这包括解析 init-methoddestroy-method 属性,以及识别任何实现了 BeanFactoryPostProcessor 接口的类。这些信息用于扩展 Bean 加载过程中的功能,允许开发者自定义 Bean 的初始化和销毁行为

生活中的例子: 想象你正在准备一顿晚餐。在这个阶段,你会查看菜谱(类似于解析配置文件),列出所有需要的食材(类似于查找 Bean 的相关信息),并确保厨房里有必要的工具(类似于识别扩展点)。这一切都是为了确保接下来的烹饪过程顺利进行。

创建实例阶段

定义与作用: 此阶段的核心任务是通过反射机制创建 Bean 的实例对象。此外,还会扫描和解析 Bean 声明的一些属性。例如,如果 Bean 配置了特定的构造函数参数,Spring 将使用这些参数来实例化对象

生活中的例子: 继续用晚餐的例子,现在你需要根据菜谱开始制作菜肴。这意味着你要按照食谱上的步骤实际动手操作,比如切菜、调味等,这就好比通过反射创建 Bean 实例的过程。

依赖注入阶段

定义与作用: 一旦 Bean 实例被创建出来,Spring 容器就会检查该 Bean 是否存在对其它 Bean 的依赖关系。如果有,则会将这些依赖注入到当前 Bean 中。常见的依赖注入方式包括使用 @Autowired 注解或者 setter 方法。同时,在此阶段还会触发一些扩展点的调用,如 BeanPostProcessorsInitializingBean 接口的方法

生活中的例子: 回到我们的晚餐场景,当你完成了一道菜的基础准备工作后,可能还需要添加其他已经准备好的配料(比如已经煮熟的米饭或炒好的配菜)。这就是一种“依赖”的体现——一道完整的菜品依赖于多个组成部分才能最终呈现。

容器缓存阶段

定义与作用: 在此阶段,Spring 容器会将 Bean 实例保存到其内部缓存中,使得该 Bean 可以被应用程序直接使用。此阶段还会调用 init-method 配置的方法以及 postProcessAfterInitialization 方法,确保 Bean 已经完全准备好供业务逻辑调用

生活中的例子: 假设你的菜肴已经做好并且摆盘完毕,现在你可以把它放在餐桌上让大家享用。同样地,在软件开发中,当 Bean 被正确初始化并存储进缓存之后,它就可以被应用程序随时调用了。

销毁实例阶段

定义与作用: 当应用上下文关闭时,Spring 容器会销毁所有的 Bean 实例。如果某个 Bean 实现了 DisposableBean 接口或配置了 destroy-method 属性,则相应的销毁方法会被调用,释放资源

生活中的例子: 最后,清理餐桌,把剩下的食物放入冰箱保存或者丢弃不再需要的部分。这一步骤对应于 Bean 的销毁阶段,其中涉及到释放内存和其他系统资源。


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

相关文章:

  • 机器学习小项目之鸢尾花分类
  • ubuntu系统中新增硬盘挂载硬盘
  • SVN 创建版本库
  • 力扣 买卖股票的最佳时机
  • PyCharm Terminal 自动切换至虚拟环境
  • module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法
  • Java并发编程面试题:锁(17题)
  • AI时代的前端开发:新兴职位与效率提升工具
  • QT异步编程之QMetaObject::invokeMethod
  • 极限网关 INFINI Gateway 配置文件核心解读
  • 基于ffmpeg+openGL ES实现的视频编辑工具-解码(四)
  • 【数据结构初阶第十二节】设计循环队列
  • transfmer学习认识
  • 用esp32实现一个可配置的网关应用记录:通过网页进行OTA升级
  • 【金融量化】解读量化投资回测指标
  • C#中的加密和解密类设计
  • 网络工程师 (43)IP数据报
  • SCANet代码解读
  • 爬取网站内容转为markdown 和 html(通常模式)
  • kotlin Java 使用ArrayList.add() ,set()前面所有值被 覆盖 的问题