生命周期
1.通过构造器创建 Bean 实例
2.为 Bean 的属性设置值和对其他 Bean 的引用
3.调用 Bean 的初始化方法(需要配置初始化方法)
4.使用 Bean
5.当容器关闭的时候,调用 Bean 的销毁方法(需要配置销毁方法)
注意:
如果配置了Bean 的后置处理器(两个方法,初始化前和初始化后),在调用 Bean 的初始化方法前后,会把 Bean 的实例传递给 Bean 的后置处理器处理
示例
类:
public class Life {
private String name;
public Life() {
System.out.println("第一步:调用无参构造创建 Bean 实例");
}
public void setName(String name) {
this.name = name;
System.out.println("第二步:调用 set 方法设置属性值");
}
public void initMethod() {
System.out.println("第三步:调用初始化方法(需要配置)");
}
public void destroyMethod() {
System.out.println("第五步:调用销毁方法");
}
}
xml配置:
<bean id="life" class="com.qj.ioc.Life" init-method="initMethod" destroy-method="destroyMethod">
<property name="name" value="小明"/>
</bean>
测试:
@Test
public void testLife() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Life life = context.getBean("life", Life.class);
System.out.println("第四步:获取创建的 Bean 对象");
// 主动关闭,测试调用销毁方法
context.close();
}
运行输出:
第一步:调用无参构造创建 Bean 实例
第二步:调用 set 方法设置属性值
第三步:调用初始化方法(需要配置)
第四步:获取创建的 Bean 对象
第五步:调用销毁方法
Process finished with exit code 0
加入后置处理器示例
1、创建类,实现接口 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;
}
}
2.配置后置处理器
配置后会对当前配置文件中的所有 Bean 生效
<bean id="myBeanPost" class="com.qj.ioc.MyBeanPost"/>
输出:
第一步:调用无参构造创建 Bean 实例
第二步:调用 set 方法设置属性值
在初始化之前调用
第三步:调用初始化方法(需要配置)
在初始化之后调用
第四步:获取创建的 Bean 对象
第四步:调用销毁方法
Process finished with exit code 0