这里给出 "spring中bean的生命周期详解" 的完整攻略:
什么是Bean的生命周期?
在 Spring 中,当一个 Bean 被创建出来并可以被容器使用时,会经历以下几个状态,这些状态构成了一个 Bean 的生命周期:
- Bean 的实例化
- Bean 的属性设置
- Bean 的初始化
- Bean 的销毁
下面我们来详细讲解每个状态。
Bean 的实例化
在容器启动时,Spring 实例化 Bean 来创建并管理对象。根据实现接口的不同,Spring 通过如下的形式实例化 Bean:
1.通过构造函数实例化 Bean。
2.通过静态工厂方法实例化 Bean。
3.通过 Bean 工厂(FactoryBean)实例化 Bean。
4.通过 BeanPostProcessor 后置处理器实例化 Bean。
下面以一个通过构造函数实例化 Bean 的例子来说明:
首先定义一个 Cat 类:
public class Cat {
// 构造函数
public Cat() {
System.out.println("调用 Cat 的构造函数!");
}
}
然后在 XML 配置文件中定义 Cat 的 Bean:
<bean id="cat" class="com.example.demo.Cat">
</bean>
这样容器启动时,就会调用构造函数来实例化 Cat。
Bean 的属性设置
Bean 实例化后,容器会将配置在 XML 文件中的属性注入至 Bean 中。有两种方式可以实现注入:
1.通过 set 方法注入属性。
2.通过构造函数注入属性。
下面以通过 set 方法注入属性的方式为例:
继续沿用上面的 Cat 类,在 Cat 中添加一个 name 属性:
public class Cat {
private String name;
// setter 方法
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("我是一只叫做 " + name + " 的猫!");
}
}
在 XML 配置文件中,配置 name 属性的值:
<bean id="cat" class="com.example.demo.Cat">
<property name="name" value="Tom"></property>
</bean>
容器启动时,就会调用 Cat 的 set 方法来设置属性。
Bean 的初始化
在 Bean 的实例化和属性注入完成之后,容器会调用 Bean 的相关初始化方法,完成一些额外操作,如初始化资源等。Spring 提供了两种方式来完成 Bean 的初始化:
1.通过实现 InitializingBean 接口实现 Bean 的自定义初始化方法。
2.通过配置 init-method 属性来调用 Bean 的初始化方法。
下面以配置 init-method 属性的方式为例:
继续沿用上面的 Cat 类,在 Cat 的类中添加一个初始化方法:
public class Cat {
private String name;
// setter 方法
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("我是一只叫做 " + name + " 的猫!");
}
public void init() {
System.out.println("调用 Cat 的初始化方法!");
}
}
在 XML 配置文件中,配置 Cat 的 init-method 属性:
<bean id="cat" class="com.example.demo.Cat" init-method="init">
<property name="name" value="Tom"></property>
</bean>
容器启动时,会调用 Cat 的初始化方法。
Bean 的销毁
当 Spring 容器关闭时,容器会调用所有 Bean 的销毁方法,释放资源。Spring 通过以下两种方式来实现 Bean 的销毁:
1.通过实现 DisposableBean 接口实现 Bean 的自定义销毁方法。
2.通过配置 destroy-method 属性来调用 Bean 的销毁方法。
下面以配置 destroy-method 属性的方式为例:
继续沿用上面的 Cat 类,在 Cat 的类中添加一个销毁方法:
public class Cat {
private String name;
// setter 方法
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("我是一只叫做 " + name + " 的猫!");
}
public void init() {
System.out.println("调用 Cat 的初始化方法!");
}
public void destroy() {
System.out.println("调用 Cat 的销毁方法");
}
}
在 XML 配置文件中,配置 Cat 的 destroy-method 属性:
<bean id="cat" class="com.example.demo.Cat" init-method="init" destroy-method="destroy">
<property name="name" value="Tom"></property>
</bean>
容器关闭时,会调用 Cat 的销毁方法。
总的来说,Spring Bean 的生命周期可以用下面的示意图表现:
┌───────────┐
│ 实例化 │
│ │
│ (构造函数) │
│ │
├───────────┤
│ 初始化 │
│ │
│(初始化方法) │
│ │
├───────────┤
│ │
│ │
│ 可用 │
│ │
│ │
├───────────┤
│ 销毁 │
│ │
│(销毁方法) │
│ │
└───────────┘
希望以上介绍对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring中bean的生命周期详解 - Python技术站