Appearance
springbean的生命周期
- 创建
- 设值
- 初始化前
- 初始化
- 初始化后
- 创建完成
- 对象销毁
- 容器关闭
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方法的调用需要手动关闭容器才会被调用,正常关闭或者直接杀进程并不会调用.这个问题待研究,不然就很鸡肋