0x01 描述
理解Spring Bean的生命周期,可以这样简单的理解
当一个 Bean被实例化时,它可能需要执行一些初始化使它转换成可用状态,这就可以使用init-method属性了
同理,当一个Bean不再需要时,从容器中移除的时候,可能需要做一些清除工作,就可以使用destroy-method属性了
Bean的生命周期可以表达为: Bean的定义->Bean的初始化->Bean的使用->Bean的销毁
0x02 小例子
// 第一步// 创建个基础方法,拿来执行初始化与销毁时的动作// 目录: ./SpringDemo/src/main/java/com/test/// 文件名: HelloWorld3.javapackage 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/beanshttps://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.javaimport 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被销毁了
