返回

深入剖析 Spring Bean 作用域和生命周期

后端

一、Spring Bean 作用域

Spring Bean 的作用域决定了 Bean 的生命周期和可见性。Spring 提供了两种主要的作用域:

  • singleton: 单例 Bean,在整个 Spring 应用程序中只创建一个实例,所有对该 Bean 的引用都指向同一个实例。
  • prototype: 原型 Bean,每次从 Bean Factory 中获取该 Bean 时都会创建一个新的实例。

二、singleton 和 prototype 的区别

特征 singleton prototype
实例数 只创建一个实例 每次获取时创建一个新的实例
生命周期 整个应用程序生命周期 仅在请求期间
线程安全性 线程安全 不一定线程安全
适用场景 无状态的 Bean,如工具类 有状态的 Bean,如用户会话

三、通过接口和 XML 设置生命周期回调方法

Spring Bean 的生命周期包括以下几个阶段:

  • 实例化: 创建 Bean 的实例。
  • 属性设置: 将属性值设置到 Bean 中。
  • 初始化: 调用 Bean 的初始化方法。
  • 销毁: 调用 Bean 的销毁方法。

我们可以通过实现 BeanNameAware、InitializingBean 和 DisposableBean 接口来设置生命周期回调方法。

  • BeanNameAware: 在 Bean 实例化后立即调用 setBeanName() 方法,将 Bean 的名称传递给 Bean。
  • InitializingBean: 在 Bean 的所有属性都设置完成后调用 afterPropertiesSet() 方法。
  • DisposableBean: 在 Bean 销毁之前调用 destroy() 方法。

除了使用接口,还可以通过 XML 配置来设置生命周期回调方法。在 Bean 的配置中添加 元素的 init-method 和 destroy-method 属性即可。

四、总结

Spring Bean 的作用域和生命周期是 Spring 框架的重要概念,理解这些概念对于构建健壮和可维护的应用程序至关重要。通过本文,您已经了解了 singleton 和 prototype 这两种作用域之间的区别,以及如何通过接口和 XML 设置生命周期回调方法。希望这些知识能够帮助您更好地使用 Spring 框架。