spring-210724-10–IOC容器–Bean管理-bean的声明周期
生命周期
生命周期:从创建到销毁。
bean生命周期(五步):
1. 通过构造器创建bean实例(无参构造)
2. 为bean的属性设置值和对其他bean的应用(调用set方法)
3. 调用bean的初始化的方法(需要进行配置初始化的方法)
4. bean就可以使用(获取到了对象)
5. 当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法)
bean的后置处理器(bean的生命周期是7步):
1. 通过构造器创建bean实例(无参构造)
2. 为bean的属性设置值和对其他bean的应用(调用set方法)
3. 把bean实例传递给bean后置处理器方法,postProcessBeforeInitialization()方法
4. 调用bean的初始化的方法(需要进行配置初始化的方法)
5. 把bean实例传递给bean后置处理器方法,postProcessAfterInitialization()方法
6. bean就可以使用(获取到了对象)
7. 当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法)
实现:
创建类,需要实现 BeanPostProcessor接口
生命周期演示
Orders.java
package com.bgy.spring.bean;
public class Orders {
private String oname;
public Orders() {
System.out.println("第一步,执行无参构造创建bean实例");
}
public void setOname(String oname) {
this.oname = oname;
System.out.println("第二步,执行set方法设置属性值");
}
public void initMethod(){
System.out.println("第三步,执行初始化方法");
}
public void destroyMethod(){
System.out.println("第五步,执行销毁方法");
}
}
lifecyclebean.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="orders" class="com.bgy.spring.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="oname" value="bgy"></property>
</bean>
</beans>
MyBeanPost.java(后置处理器,七步)
package com.bgy.spring.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
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;
}
}
lifecyclebean02.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="orders" class="com.bgy.spring.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="oname" value="bgy"></property>
</bean>
<bean id="myBeanPost" class="com.bgy.spring.bean.MyBeanPost"></bean>
</beans>
TestLifeCycle.java
import com.bgy.spring.bean.Orders;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestLifeCycle {
@Test
public void test01(){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("lifecyclebean.xml");
Orders orders = applicationContext.getBean("orders", Orders.class);
System.out.println("第四步,获取创建bean实例对象");
System.out.println(orders);
applicationContext.close();
}
@Test
public void test02(){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("lifecyclebean02.xml");
Orders orders = applicationContext.getBean("orders", Orders.class);
System.out.println("第四步,获取创建bean实例对象");
System.out.println(orders);
applicationContext.close();
}
}