0x01 描述
理解Spring Bean的生命周期,可以这样简单的理解
当一个 Bean被实例化时,它可能需要执行一些初始化使它转换成可用状态,这就可以使用init-method属性了
同理,当一个Bean不再需要时,从容器中移除的时候,可能需要做一些清除工作,就可以使用destroy-method属性了
Bean的生命周期可以表达为: Bean的定义->Bean的初始化->Bean的使用->Bean的销毁
0x02 小例子
// 第一步
// 创建个基础方法,拿来执行初始化与销毁时的动作
// 目录: ./SpringDemo/src/main/java/com/test/
// 文件名: HelloWorld3.java
package com.test;
public class HelloWorld3 {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("Your Message: " + message);
}
public void init() {
System.out.println("这个bean进行了初始化");
}
public void destroy() {
System.out.println("这个bean被销毁了");
}
}
// 第二步
// 在applicationContext.xml文件配置Bean并且添加init-method与destroy-method
// 这里提供一个配置好的applicationContext.xml文件
// 目录: ./SpringDemo/src/main/resources/
// 文件名: applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloWorldTest3" class="com.test.HelloWorld3" init-method="init" destroy-method="destroy">
<property name="message" value="Hello World!"/>
</bean>
</beans>
// 第三步
// 创建一个测试类Test8进行测试
// 目录: ./SpringDemo/src/test/java/
// 文件名: Test8.java
import com.test.HelloWorld3;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test8 {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld3 obj = (HelloWorld3) context.getBean("helloWorldTest3");
obj.getMessage();
// 注册一个关闭钩子,关闭Spring IOC容器
// 用来触发bean标签的destroy-method属性
context.registerShutdownHook();
}
}
// 运行结果
这个bean进行了初始化
Your Message: Hello World!
这个bean被销毁了