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 容器初始化阶段创建。 ![image.png]()
默认情况(`scope=singleton`,只创建一个实例)
- Spring 创建的 Bean 默认是单例模式,这意味着对于 service 和 dao 层的所有类,在放入 Spring 容器后,默认是单例的。因此,这些层的类不应该在类属性中存储数据,因为那样会导致数据在所有实例之间共享(存在安全性问题)。
![image.png]()
![image.png]()
生命周期
- 创建:通过构造函数创建对象实例。
- 初始化:Spring 内部执行初始化回调方法(如实现
InitializingBean接口或定义init-method)。 - 销毁:当 Spring 容器关闭时,会调用销毁回调方法(如实现
DisposableBean接口或定义destroy-method)。通常情况下,随着 Web 容器的关闭,Spring 容器也会随之关闭。 ![image.png]()
![image.png]()
构造器注入
- 使用
constructor-arg标签可以指定 Bean 的构造函数参数。 - 可以通过
index、ref、value或type来唯一标识构造器参数。 - 如果一个 Bean 的配置中没有
constructor-arg属性,则 Spring 容器将尝试使用默认的无参构造函数来创建对象实例。 - 因此,在编写 JavaBean 时,推荐提供属性的 setter 方法、默认构造器以及带有参数的构造器以适应不同的依赖注入场景。






浙公网安备 33010602011771号