bean的生命周期
我们先讲不含后置处理器的:
(1)通过构造器创建bean实例(无参数构造)
(2)为bean的属性设置值和对其他bean引用(调用set方法)
(3)调用bean的初始化的方法(需要进行配置初始化的方法)。
(4) bean可以使用了对象获取到了).
(5)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)
先创建一个我们要调用的bean 然后我会在各个步骤上进行输出。
package cn.zsp.spring5.bean;
public class Order {
private String pname;
// (1)通过构造器创建bean实例(无参数构造)
// (2)为bean的属性设置值和对其他bean引用(调用set方法)↓
// (3)调用bean的初始化的方法(需要进行配置初始化的方法)。
// (4) bean可以使用了对象获取到了).
// (5)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)·
public Order() {
System.out.println("这是bean的第一步使用无参构造");
}
public void setPname(String pname) {
System.out.println("这是bean的第二步对bean设置值");
this.pname = pname;
}
public void initMethod(){
System.out.println("这是第三步进行初始化");
}
public void destroyMethod(){
System.out.println("这是第五步销毁bean");
}
}
配置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 id="order" class="cn.zsp.spring5.bean.Order" init-method="initMethod" destroy-method="destroyMethod">
<property name="pname" value="zsp"></property>
</bean>
</beans>
第三步使用测试类:没啥说的,就是记得调用销毁方法
@Test
public void show5(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");
Order order = context.getBean("order", Order.class);
System.out.println("这是bean的第四部调用实例");
System.out.println(order);
context.close();
}
这是演示结果
bean的生命周期(含后置处理器)
在前面的基础上多了创造一个后置处理器的类:注意要继承BeanPostProcessor 并且重写两个方法
(1)通过构造器创建bean实例(无参数构造)
(2)为bean的属性设置值和对其他bean引用(调用set方法)
(3)把bean实例传递bean后置处理器的方法
(4)调用bean的初始化的方法(需要进行配置初始化的方法)u
(5))把bean实例传递bean后置处理器的方法
(6) bean可以使用了(对象获取到了)u
(7)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)以
package cn.zsp.spring5.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;
public class MyBeanPost 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;
}
}
然后修改一下配置文件:
package cn.zsp.spring5.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;
public class MyBeanPost 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;
}
}