0x01 描述

理解Spring Bean的生命周期,可以这样简单的理解
当一个 Bean被实例化时,它可能需要执行一些初始化使它转换成可用状态,这就可以使用init-method属性了
同理,当一个Bean不再需要时,从容器中移除的时候,可能需要做一些清除工作,就可以使用destroy-method属性了

Bean的生命周期可以表达为: Bean的定义->Bean的初始化->Bean的使用->Bean的销毁

0x02 小例子

  1. // 第一步
  2. // 创建个基础方法,拿来执行初始化与销毁时的动作
  3. // 目录: ./SpringDemo/src/main/java/com/test/
  4. // 文件名: HelloWorld3.java
  5. package com.test;
  6. public class HelloWorld3 {
  7. private String message;
  8. public void setMessage(String message) {
  9. this.message = message;
  10. }
  11. public void getMessage() {
  12. System.out.println("Your Message: " + message);
  13. }
  14. public void init() {
  15. System.out.println("这个bean进行了初始化");
  16. }
  17. public void destroy() {
  18. System.out.println("这个bean被销毁了");
  19. }
  20. }
  1. // 第二步
  2. // 在applicationContext.xml文件配置Bean并且添加init-method与destroy-method
  3. // 这里提供一个配置好的applicationContext.xml文件
  4. // 目录: ./SpringDemo/src/main/resources/
  5. // 文件名: applicationContext.xml
  6. <?xml version="1.0" encoding="UTF-8"?>
  7. <beans xmlns="http://www.springframework.org/schema/beans"
  8. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. https://www.springframework.org/schema/beans/spring-beans.xsd">
  11. <bean id="helloWorldTest3" class="com.test.HelloWorld3" init-method="init" destroy-method="destroy">
  12. <property name="message" value="Hello World!"/>
  13. </bean>
  14. </beans>
  1. // 第三步
  2. // 创建一个测试类Test8进行测试
  3. // 目录: ./SpringDemo/src/test/java/
  4. // 文件名: Test8.java
  5. import com.test.HelloWorld3;
  6. import org.springframework.context.support.AbstractApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8. public class Test8 {
  9. public static void main(String[] args) {
  10. AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  11. HelloWorld3 obj = (HelloWorld3) context.getBean("helloWorldTest3");
  12. obj.getMessage();
  13. // 注册一个关闭钩子,关闭Spring IOC容器
  14. // 用来触发bean标签的destroy-method属性
  15. context.registerShutdownHook();
  16. }
  17. }
  18. // 运行结果
  19. 这个bean进行了初始化
  20. Your Message: Hello World!
  21. 这个bean被销毁了