生命周期

1.通过构造器创建 Bean 实例
2.为 Bean 的属性设置值和对其他 Bean 的引用
3.调用 Bean 的初始化方法(需要配置初始化方法)
4.使用 Bean
5.当容器关闭的时候,调用 Bean 的销毁方法(需要配置销毁方法)

注意:
如果配置了Bean 的后置处理器(两个方法,初始化前和初始化后),在调用 Bean 的初始化方法前后,会把 Bean 的实例传递给 Bean 的后置处理器处理

示例

类:

  1. public class Life {
  2. private String name;
  3. public Life() {
  4. System.out.println("第一步:调用无参构造创建 Bean 实例");
  5. }
  6. public void setName(String name) {
  7. this.name = name;
  8. System.out.println("第二步:调用 set 方法设置属性值");
  9. }
  10. public void initMethod() {
  11. System.out.println("第三步:调用初始化方法(需要配置)");
  12. }
  13. public void destroyMethod() {
  14. System.out.println("第五步:调用销毁方法");
  15. }
  16. }

xml配置:

  1. <bean id="life" class="com.qj.ioc.Life" init-method="initMethod" destroy-method="destroyMethod">
  2. <property name="name" value="小明"/>
  3. </bean>

测试:

  1. @Test
  2. public void testLife() {
  3. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  4. Life life = context.getBean("life", Life.class);
  5. System.out.println("第四步:获取创建的 Bean 对象");
  6. // 主动关闭,测试调用销毁方法
  7. context.close();
  8. }

运行输出:

第一步:调用无参构造创建 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