Spring5-------------bean生命周期
bean的生命周期可以分为五个阶段
(1)实例化
(2)属性赋值
(3)初始化
(4)使用
(5)销毁
常用扩展点
InstantiationAwareBeanPostProcessor:作用于实例化阶段的前后
BeanPostProcessor:作用于初始化阶段的前后
InstantiationAwareBeanPostProcessor实际上继承了BeanPostProcessor接口

Course.java
package com.tang.spring;
public class Course {
private String cname;
public Course() {
System.out.println("第一步:执行无参构造器创建bean实例");
}
public void setCname(String cname) {
this.cname = cname;
System.out.println("第二步:调用set方法设置属性值");
}
//创建初始化方法
public void init(){
System.out.println("第三步:执行初始化方法");
}
//创建销毁方法
public void destroy(){
System.out.println("第五步:执行销毁方法");
}
@Override
public String toString() {
return "Course{" +
"cname='" + cname + '\'' +
'}';
}
}
后置处理器
package com.tang.spring;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之前执行");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之后执行");
return bean;
}
}
配置文件
<bean id="course" class="com.tang.spring.Course" init-method="init" destroy-method="destroy">
<property name="cname" value="数据库"></property>
</bean>
<!-- 配置后置处理器-->
<bean id="myprocessor" class="com.tang.spring.MyBeanPostProcessor"></bean>
测试
package com.tang.spring.testdemo;
import com.tang.spring.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void testAdd() {
//加载spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//获取配置创建的对象
Course course = context.getBean("course", Course.class);
System.out.println("第四步:获取bean实例对象");
System.out.println(course);
//手动销毁bean实例对象
((ClassPathXmlApplicationContext) context).close();
}
}
浙公网安备 33010602011771号