Spring_04_Bean 生命周期

来源:互联网 发布:php网络验证源码post 编辑:程序博客网 时间:2024/06/05 03:00

一、知识点概述

当一个 bean 被实例化时,可能需要执行一些数据初始化的工作。同样,当 bean 不再需要,从容器中移除时,可能需要做一些清除工作。

在Bean的配置中,通过属性init-method及destroy-method,分别处理实例化及销毁时的回调。

init-method 属性指定一个方法名,在实例化 bean 之后,立即调用该方法。同样,destroy-method 属性指定一个方法名,从容器中移除 bean 之后,该方法会被调用。

二、项目构建

1、创建Maven项目

<groupId>ycz.spring</groupId><artifactId>04_spring_lifecycle</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging>

2、添加对Spring的依赖

<dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-core</artifactId>    <version>4.3.8.RELEASE</version></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-context-support</artifactId>    <version>4.3.8.RELEASE</version></dependency>

三、测试用例

1、测试init-method及destroy-method属性

  • 新增JavaBean

在src/main/Java源路径下新增包com.ycz.spring.lifecycle
在com.ycz.spring.lifecycle包下新增类Section5,内容如下

public class Section4 {    private String message;    public void setMessage(String message) {        System.out.println("开始初始化实例属性");        this.message = message;    }    public void sayHello() {        System.out.println("Hello " + message);    }    // 本方法用于设置init-method属性,会在对象实例化之后执行    public void init() {        System.out.println("开始执行初始化回调方法");    }    // 本方法用于设置destroy-method属性,会在Bean销毁时执行    public void destroy() {        System.out.println("开始执行销毁回调方法");    }}
  • 注册Bean,在Spring配置文件中添加
<bean id="section5" class="com.ycz.spring.lifecycle.Section5" init-method="init" destroy-method="destroy">    <property name="message" value="Spring"/></bean>
  • 编写启动类
public class Boot {    public static void main(String[] args) {        // 读取配置文件config.xml,启动IOC容器        AbstractApplicationContext ac = new ClassPathXmlApplicationContext("config.xml");        // 从IOC容器中获取Bean实例        Section5 bean = ac.getBean("section5", Section5.class);        bean.sayHello();        ac.destroy();    }}
  • 运行结果

开始初始化实例属性
开始执行初始化回调方法
Hello Spring
开始执行销毁回调方法

  • 代码分析

因为没有设置lazy-init为true,所以Section5会在Spring容器启动时进行实例化。实例化的过程包括了对象的创建以及属性注入。

第一行代码,启动容器,首先会执行setMessage方法进行属性注入,打印输出“开始初始化实例属性”。

属性注入后,实例化过程完成,因为设置了属性init-method,则Spring会执行init-method设置的方法,用于初始化,打印输出“开始执行初始化回调方法”。

第三行代码,调用实例的sayHello方法,因为message属性已经在实例化时注入,所以打印输出“Hello Spring”。

第四行代码,销毁Spring容器,容器销毁则容器中的对象都将被销毁,因为Section5实例设置的destroy-method属性,在Section5销毁时会先执行设置的destroy方法,所以打印输出“开始执行销毁回调方法”。

原创粉丝点击