下面我来详细讲解一下 Spring 中 Bean 的生命周期的完整攻略。
1. Bean 的生命周期概述
Bean 的生命周期可以被分为以下几个阶段:
- 实例化阶段:在容器中创建一个 Bean 的实例,一般是通过 Java 的反射机制实现;
- 属性赋值阶段:容器通过 setter 方法或者直接赋值,将 Bean 的属性值填充到 Bean 实例中;
- 初始化阶段:Bean 进行一些初始化操作,比如调用自定义的初始化方法等;
- 使用阶段:容器将 Bean 实例提供给应用程序使用;
- 销毁阶段:Bean 生命结束,容器对 Bean 执行销毁操作。
下面我将详细介绍每个阶段的执行过程以及示例说明。
2. 实例化阶段
Bean 的实例化过程是由 IoC 容器负责的,一般使用 Java 的反射机制来实现。在实例化过程中,容器会调用 Bean 的无参构造器来创建一个 Bean 的实例,然后将 Bean 的属性值进行填充。
示例:
public class User {
public User() {
System.out.println("User 实例化");
}
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
<bean id="user" class="com.example.User">
<property name="name" value="张三" />
</bean>
在上面的示例中,当容器实例化 id 为 user 的 Bean 时,会调用 User 的无参构造器来创建一个 Bean 实例,之后再将属性 name 设置为 "张三"。
3. 属性赋值阶段
属性赋值阶段是在 Bean 实例化之后进行的。容器会通过调用 Bean 的 setter 方法或者直接赋值的方式,将 Bean 的属性值填充到 Bean 实例中。
示例:
public class Car {
private String brand;
public Car() {
System.out.println("Car 实例化");
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
}
<bean id="car" class="com.example.Car">
<property name="brand" value="BMW" />
</bean>
在上面的示例中,当容器实例化 id 为 car 的 Bean 时,会将属性 brand 的值设置为 "BMW"。
4. 初始化阶段
在完成属性赋值之后,容器会开始初始化 Bean,执行 Bean 的自定义初始化操作,如调用 Bean 的初始化方法等。
示例:
public class Animal {
private String name;
public Animal() {
System.out.println("Animal 实例化");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void init() {
System.out.println("Animal 初始化");
}
}
<bean id="animal" class="com.example.Animal" init-method="init">
<property name="name" value="狗" />
</bean>
在上面的示例中,当容器实例化 id 为 animal 的 Bean 时,会将属性 name 的值设置为 "狗",之后再调用 init() 方法。
5. 使用阶段
在初始化过程完成之后,Bean 开始进入使用阶段。容器会将 Bean 实例提供给应用程序使用。
示例:
public class Fruit {
private String name;
public Fruit() {
System.out.println("Fruit 实例化");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void eat() {
System.out.println("吃 " + name);
}
}
<bean id="fruit" class="com.example.Fruit">
<property name="name" value="苹果" />
</bean>
在上面的示例中,当容器实例化 id 为 fruit 的 Bean 时,会将属性 name 的值设置为 "苹果"。应用程序可以通过调用 Bean 的 eat() 方法来使用。
6. 销毁阶段
Bean 的生命周期最终会结束,这个阶段是由容器负责的。当容器决定销毁 Bean 时,会调用 Bean 的自定义销毁方法进行处理。
示例:
public class Book {
private String name;
public Book() {
System.out.println("Book 实例化");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void init() {
System.out.println("Book 初始化");
}
public void destroy() {
System.out.println("Book 销毁");
}
}
<bean id="book" class="com.example.Book" init-method="init" destroy-method="destroy">
<property name="name" value="Java 编程思想"/>
</bean>
在上面的示例中,当容器决定销毁 id 为 book 的 Bean 时,会调用 Bean 的 destroy() 方法。
总结
上面就是 Spring 中 Bean 的生命周期的完整攻略。无论是实例化、属性赋值、初始化、使用还是销毁,容器都会在相应的阶段执行相应的操作。对于开发者来说,需要知道 Bean 的生命周期模型,才能更加深入的理解 Spring 框架的基本原理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring 中 Bean 的生命周期 - Python技术站