IOC(十)

Bean的生命周期就是对象从创建到销毁的过程, 一共有七步:

  1. 通过构造器创建bean实例(无参数构造); 
  2. 设置bean的属性值和对其他bean引用(调用set方法);
  3. 把bean实例传递给bean后置处理器的方法postProcessBeforeInitialization
  4. 调用bean的初始化的方法(需要配置初始化方法);
  5. 把bean实例传递给bean后置处理器的方法postProcessAfterInitialization
  6. bean可以使用了(获取到了对象);
  7. 当容器关闭的时候, 调用bean的销毁方法(需要配置销毁方法)

实例演示如下:

创建MyBean类:

public class MyBean {

    //创建无参数构造器
    public MyBean() {
        System.out.println("1.执行无参数构造器创建bean实例");
    }

    private String name;
    public void setName(String name) {
        this.name = name;
        System.out.println("2.调用set方法设置属性值");
    }

    //创建初始化的执行方法
    public void initMethod(){
        System.out.println("4.执行初始化的方法");
    }

    //创建销毁的执行方法
    public void destroyMethod(){
        System.out.println("7.执行销毁的方法");
    }
}

创建MyBeanPost类:(实现BeanPostProcessor接口)

public class MyBeanPost implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("3.在初始化之前执行的方法");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("5.在初始化之后执行的方法");
        return bean;
    }
}

创建配置文件:(实现了BeanPostProcessor的bean就是后置处理器, 在配置文件中配好后, Spring会为配置文件中的所有bean添加此后置处理器)

<?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">

    <bean id="myBean" class="com.ryan.spring5.lifeCycle.MyBean" init-method="initMethod" destroy-method="destroyMethod">
        <property name="name" value="张辽"></property>
    </bean>

    <!--配置后置处理器-->
    <bean id="myBeanPost" class="com.ryan.spring5.lifeCycle.MyBeanPost"></bean>
</beans>

测试:

public class Test {
    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("file:src\com\ryan\spring5\lifeCycle\bean.xml");
        MyBean myBean = context.getBean("myBean", MyBean.class);
        System.out.println("6.获取创建实例对象: " + myBean);

        //手动销毁bean实例, 需要强转成ClassPathXmlApplicationContext类型才能调用close方法
        //*强转成ClassPathXmlApplicationContext需要加载配置文件时使用ClassPathXmlApplicationContext方法
        ((ClassPathXmlApplicationContext)context).close();
    }
}

输出:

原文地址:https://www.cnblogs.com/Ryan368/p/13898368.html