返回
深入剖析 Spring Bean 作用域和生命周期
后端
2023-09-15 18:03:43
一、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 的配置中添加
四、总结
Spring Bean 的作用域和生命周期是 Spring 框架的重要概念,理解这些概念对于构建健壮和可维护的应用程序至关重要。通过本文,您已经了解了 singleton 和 prototype 这两种作用域之间的区别,以及如何通过接口和 XML 设置生命周期回调方法。希望这些知识能够帮助您更好地使用 Spring 框架。