Bean的生命周期
Bean的生命周期
Spring Bean 类型与配置
1.1 Bean 种类
普通 Bean
- 普通的 Bean 定义格式为
<bean id="" class="A">
,Spring 容器会直接创建A
类的实例并返回。
FactoryBean
- FactoryBean 是一种特殊的 Bean,具有工厂方法来生成对象的能力。
- 实现 FactoryBean 接口的类必须提供
getObject()
方法,该方法用于获取特定 Bean 的实例。
<bean id="" class="FB">
- 在此情况下,Spring 首先创建
FB
类的实例,然后通过调用getObject()
方法,并返回该方法的返回值。FB fb = new FB(); return fb.getObject();
- 实现 FactoryBean 接口的类必须提供
BeanFactory 和 FactoryBean 对比
- BeanFactory:是 Spring 的核心接口,它是一个容器,负责生产和管理任意类型的 Bean。
- FactoryBean:是一种特殊的 Bean,它不是用来被注入到其他 Bean 中的,而是用来生产另一个特定 Bean 的。例如,ProxyFactoryBean 可以用于生成代理对象实例:
<bean id="" class="...ProxyFactoryBean"> <!-- 获得代理对象实例 -->
- AOP(面向切面编程)中常常使用 FactoryBean 来创建代理对象。
生命周期属性:lazy-init
- 默认值为
false
,表示在 Spring 容器启动时创建对象。 - 当设置为
true
时,对象将在首次getBean()
调用时创建。 - 设置为
default
或false
时,对象在 Spring 容器初始化阶段创建。
默认情况(`scope=singleton`,只创建一个实例)
- Spring 创建的 Bean 默认是单例模式,这意味着对于 service 和 dao 层的所有类,在放入 Spring 容器后,默认是单例的。因此,这些层的类不应该在类属性中存储数据,因为那样会导致数据在所有实例之间共享(存在安全性问题)。
生命周期
- 创建:通过构造函数创建对象实例。
- 初始化:Spring 内部执行初始化回调方法(如实现
InitializingBean
接口或定义init-method
)。 - 销毁:当 Spring 容器关闭时,会调用销毁回调方法(如实现
DisposableBean
接口或定义destroy-method
)。通常情况下,随着 Web 容器的关闭,Spring 容器也会随之关闭。
构造器注入
- 使用
constructor-arg
标签可以指定 Bean 的构造函数参数。 - 可以通过
index
、ref
、value
或type
来唯一标识构造器参数。 - 如果一个 Bean 的配置中没有
constructor-arg
属性,则 Spring 容器将尝试使用默认的无参构造函数来创建对象实例。 - 因此,在编写 JavaBean 时,推荐提供属性的 setter 方法、默认构造器以及带有参数的构造器以适应不同的依赖注入场景。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!