1. 程式人生 > 實用技巧 >IOC(十) - Bean的生命週期

IOC(十) - Bean的生命週期

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();
    }
}

輸出: