1.bean的生命周声明
单例bean的生命周期: 从容器的创建开始到容器的关闭结束。
实例bean的生命周期: 从容器中获取对象开始,到自行销毁对象结束。
我们可以使用init-method和destroy-method方法为bean对象指定初始化对象或者销毁对象时需要做的操作。
单例bean
1. 在对象的class中创建需要执行的方法
public void initBean() {
System.out.println("初始化方法");
}
public void destroyBean() {
System.out.println("销毁方法");
}
2. 在IOC中指定init-method="“和destroy-method=”"需要调用的方法
<bean id="user" class="com.hao.spring.user.User" init-method="initBean" destroy- method="destroyBean">
<property name="userName" value="qianghao"></property>
<property name="sex" value="man"></property>
<property name="age" value="25"></property>
</bean>
3. 测试调用:
调用顺序:构造器→指定的对象初始化方法→容器关闭→指定的对象销毁方法。我们从控制台的信息可以看到,bean先初始化,然后才执行了main中的打印方法。
多实例bean
多实例bean和单例bean的区别就是方法的调用顺序
IOC容器创建→获取兑现时执行构造器→指定的对象初始化方法
多实例bean并不会自行销毁,所以不会执行销毁方法
2. bean的后置处理器
spring提供了一个BeanPostProcessor接口,该接口是为了在初始化bean对象的前后进行一些操作而准备的。共有两个方法:
postProcessBeforeInitialization;
postProcessAfterInitialization;
参数:bean为要进行初始化的队形,beanName为对象在IOC容器中的id名称
创建后期处理器:
- 创建一个实现了BeanPostProcessor接口的类
package com.hao.spring.user;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class PostProcess implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization被执行,初始化 了"+beanName+",并返回"+bean);
User s = (User)bean;
s.setUserName("李四");
System.out.println("Before修改后的bean"+s);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization被执行,初始化了"+beanName+",并返回"+bean);
User s = (User)bean;
s.setUserName("张三");
System.out.println("After修改后的bean"+s);
return s;
}
}
- 并将该类注册在IOC容器中
- 测试后置处理器