一、Bean的生命周期简介

和世界上很多生物一样,Spring的Bean也是有生命周期的,这个周期就是一个由生到死的过程, 和生物的生命一样,Bean生命周期的开始就是Bean的产生,当Bean被实例化的时候,Bean会完成一些初始化的工作。 同样的,当不需要使用Bean的时候,容器中的Bean会被销毁,这个时候会完成一些清理工作,这样,Bean的 生命就结束了。 当Bean初始化和销毁的时候会有一系列的动作发生,但今天主要讲两个方法,一个是init-method,一个是 destroy-method,他们会分别在Bean被初始化和销毁的时候被回调(Callback)。这样,你就可以在Bean初始化或者销毁的时候,完成一些需要的工作。

二、Bean初始化的回调

Bean初始化的回调方法的定义有两种方式,一种是直接实现org.springframework.beans.factory.InitializingBean 接口:

public class User implements InitializingBean{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("完成初始化工作...");
    }

}

另一种方式是不实现上述接口,在xml文件中指定init方法,然后在对于的类中定义并实现指定的init方法:

public class User{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //初始化
    public void init(){
        System.out.println("指定的初始化回调方法...");
    }

}

//xml配置文件内容
<bean id="User" class="sk.spring.tuto.demo3.User" init-method="init"></bean>

三、Bean被销毁的回调

和初始化一样,也有两种方式,一种是实现org.springframework.beans.factory.DisposableBean接口:

public class User implements DisposableBean{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void destroy() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("对象销毁...");
    }

}

另一种方式是在xml配置文件中定义bean的destroy-method:

public class User{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;


    public  void destroy(){
        System.out.println("销毁了...");
    }

}

//配置文件中内容
<bean id="User" class="sk.spring.tuto.demo3.User" destroy-method="destroy"></bean>  

四、指定默认初始化和销毁回调方法

如果你有很多个bean都有相同名字的初始化和销毁回调方法,那么不不要每个bean都去指定,只要像下面这样:

<?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 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"
default-init-method="init"
default-destroy-method="destroy"
>

    <bean id="User" class="sk.spring.tuto.demo3.User" ></bean>

</beans>

只要在xml的beans节点指定default的方法就可以了。

五、总结

本篇简单介绍了下Spring bean的生命周期中初始化和销毁阶段的两个主要回调方法。每个回调方法都有两种方式, 但推荐使用xml配置文件指定方法的方式,因为名字可以自定义,比实现接口的方式更灵活。

参考:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/overview.html

##文档信息