Skip to content

springbean的生命周期

  1. 创建
  2. 设值
  3. 初始化前
  4. 初始化
  5. 初始化后
  6. 创建完成
  7. 对象销毁
  8. 容器关闭
  • LifeCycleModel.java 用于演示springbean生命周期的bean
java
package com.wyizd.life;
public class LifeCycleModel {
    private String name;
    public LifeCycleModel() {
        System.out.println("1.创建");
    }
    public void setName(String name) {
        this.name = name;
        System.out.println("2.设值");
    }
    public void init(){
        System.out.println("4.初始化");
    }
    public void destroy(){
        System.out.println("7.对象销毁");
    }
    @Override
    public String toString() {
        return ("6.创建完成");
    }
}
  • CustomerBeanProcess.java 用于对所有springbean的初始化前后置进行管理,注意,是所有的
java
package com.wyizd.life;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
 * 这个处理器会对所有bean生效
 */
public class CustomerBeanProcess implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("3.初始化前");
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("5.初始化后");
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }
}
  • life.xml 配置文件,定义springbean
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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean class="com.wyizd.life.LifeCycleModel"
        init-method="init"
        destroy-method="destroy">
        <property name="name" value="alfred" />
    </bean>
    <bean class="com.wyizd.life.CustomerBeanProcess" />
</beans>
  • Test.java 开始测试
java
package com.wyizd.life;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("life.xml");
        LifeCycleModel bean = context.getBean(LifeCycleModel.class);
        System.out.println(bean);
        context.close();
    }
}
  • 总结,destroy方法的调用需要手动关闭容器才会被调用,正常关闭或者直接杀进程并不会调用.这个问题待研究,不然就很鸡肋