前言
- 创建bean对象
- 给bean对象注入属性值
- 调用后置处理器(初始化前)
- bean对象初始化
- 调用后置处理器(初始化后)
- bean对象创建完成,可以使用
- bean对象销毁
一、创建bean对象
//无参构造方法
public User(){
System.out.println("1. bean对象创建,调用无参构造方法");
}
二、给bean对象注入属性值
<bean id="user" class="com.cx.spring6.iocxml.lifecycyle.User" scope="singleton" init-method="init" destroy-method="destroy">
<property name="uname" value="cx"></property>
<property name="age" value="23"></property>
</bean>
public void setUname(String uname) {
this.uname = uname;
System.out.println("2. bean对象注入属性值");
}
其中<init-method>和<destroy-method>分别是初始化和销毁时调用的自定义方法
三、后置处理器
需要实现BeanPostProcessor接口
public class MyBeanPost implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("3. bean后置处理器,初始化之前执行" + beanName + " = " + bean);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("5. bean后置处理器,初始化之后执行" + beanName + " = " + bean);
return bean;
}
}
还需要在Spring配置文件中进行配置,只需配置一次,对xml文件内的所有bean都有效
<!-- bean的后置处理器要放入IOC容器才能生效 -->
<bean id="myBeanPost" class="com.cx.spring6.iocxml.lifecycyle.MyBeanPost"/>
四、bean对象初始化
//初始化
public void init(){
System.out.println("4. bean对象初始化,调用指定的初始化方法");
}
五、bean对象创建成功
六、bean对象销毁
//销毁
public void destroy(){
System.out.println("7. bean对象销毁,调用指定的销毁方法");
}
运行结果图