IOC操作Bean管理-Bean的生命周期
什么是生命周期?
- 从对象的创建到对象销毁的过程
Bean的生命周期(不加后置处理器)
- 通过构造器创建bean实例(无参构造)
- 为Bean的属性设置值和对其他Bean的引用(调用set方法)
- 调用Bean的初始化方法(需要进行配置)
- Bean可以使用该了(对象获取到了)
- 当容器在关闭的时候,调用Bean的销毁方法(需要进行配置销毁的方法)
演示操作流程
-
第一步
1.在实体类创建无参构造方法
-
第二步
1.在实体类生成set方法
-
第三步
1.写一个初始化方法,仅用来显示效果
2.在配置文件中写上init-method属性参数为初始化方法名
-
第四步
1.在测试类中获取到对象
-
第五步
1.在配置文件中使用destroy-method属性参数名为实体类中的销毁方法
2.在实体类写一个销毁方法,仅用于显示效果
- 测试类代码
运行结果:
总结:
- 在输出结果中可以看出该Bean在生命周期中的整个流程和执行方法的顺序
代码全部内容一览:
- 实体类代码
package com.yang.pojo;
/**
* @program: TestSpring
* @description: 演示Bean的生命周期
* @author: 陈阳
* @create: 2021-01-22 14:44
**/
public class Orders {
private String ordersName;
/**
* 无参构造方法
*/
public Orders() {
System.out.println("第一步,通过构造器创建bean的实例");
}
/**
* set方法
* @param ordersName
*/
public void setOrdersName(String ordersName) {
System.out.println("第二步,为bean的属性设置值");
this.ordersName = ordersName;
}
/**
* 随便写的初始化方法,方法名可以任意
*/
public void init(){
System.out.println("第三步,初始化方法");
}
/**
* 随便写的销毁方法,方法名可以任意
*/
public void distroy(){
System.out.println("第五步,销毁方法");
}
}
- 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">
<!--
init-method:调用初始化方法(参数里写方法名不用加括号)
destroy-method:调用销毁方法(参数里写方法名不用加括号)
-->
<bean id="orders" class="com.yang.pojo.Orders" init-method="init" destroy-method="distroy">
<property name="ordersName" value="练习订单"/>
</bean>
</beans>
- 测试类代码
package com.yang.run;
import com.sun.org.apache.bcel.internal.util.ClassPath;
import com.sun.org.apache.xpath.internal.SourceTree;
import com.yang.pojo.ArrayAndCollection;
import com.yang.pojo.Book;
import com.yang.pojo.MyBean;
import com.yang.pojo.Orders;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.annotation.Order;
import java.sql.SQLOutput;
import java.util.Arrays;
/**
* @program: TestSpring
* @description: 测试bean对象是否创建成功
* @author: 陈阳
* @create: 2021-01-21 19:40
**/
public class TestBean {
@Test
public void testOrders(){
/**
* ApplicationContext context = new ClassPathXmlApplicationContext("OrderBean.xml");
*
* 在这里不使用上边的ApplicationContext接口,
* 因为该接口中没有close()手动销毁方法如果使用该接口则调用close()方法时需强转
* 例如:((ClassPathXmlApplicationContext)context).close();
* 所以建议直接使用ClassPathXmlApplicationContext类
*/
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("OrderBean.xml");
Orders orders = context.getBean("orders", Orders.class);
System.out.println("第四步,获取到对象了");
//调用销毁方法
context.close();
}
}
Bean的后置处理器
- 如果加上后置处理器Bean的生命周期一共有七步,如果不加仅有五步
- 通过构造器创建bean实例(无参构造)
- 为Bean的属性设置值和对其他Bean的引用(调用set方法)
- 把bean的实例传递给Bean的后置处理器方法: postProcessBeforeInitialization()
- 调用Bean的初始化方法(需要进行配置)
- 把Bean的实例传递Bean后置处理器方法: postProcessAfterInitialization()
- Bean可以使用该了(对象获取到了)
- 当容器在关闭的时候,调用Bean的销毁方法(需要进行配置销毁的方法)
演示添加后置处理器效果
1.创建后置处理器类实现BeanPostProcessor接口
-
让将要作为后置处理器的类实现BeanPostProcessor接口
-
该接口有以下两个方法
-
将方法复制到后置处理器类中,并将访问权限改为public,将注解改为@Override重写
-
为了显示运行效果在两个方法中加上输出语句
-
在配置文件中加入属性
-
运行结果