9.02-Spring IOC 容器中Bean的生命週期

Spring IOC 容器能夠管理Bean的生命週期,Spring 容許在Bean的生命週期的特定點執行定製的任務。spring

Spring IOC  容器中 Bean  的生命週期以下:
① .  經過構造器或工廠方法建立 Bean  實例 : 調用構造器
② .  爲 Bean的屬性設置值和對其餘 Bean的引用 : 調用 setter
③ .  將 Bean給實例傳遞給Bean後置處理器的postProcessBeforeInitialization  方法
④ .  調用 Bean的初始化方法 : init-method
⑤ .  將Bean實例傳遞給 Bean後置處理器的postProcessAfterInitialization  方法
⑥ .  Bean  能夠使用了
⑦ .  當容器關閉時 ,  調用 Bean  的銷燬方法 : destroy- - method 。ide

    Bean  的初始化和銷燬方法:能夠經過 bean 節點的 init-method 和destroy-method 來配置 Bean 的初始化方法和銷燬方法:post

<bean id="person" class="com.atguigu.spring.lifecycle.Person"
 init- - method="init"
 destroy- - method="destroy">
 <property name="name" value="abcd"></property> 
</bean>

    注意:ApplicationContext 接口中沒有關閉容器的方法,因此使用ApplicationContext 接口做爲 IOC 容器的引用,destroy-method 將不會起到做用 , 須要使用ApplicationContext 的子接口ConfigurableApplicationContext。ui

 

詳解Bean後置處理器:3d

Bean後置處理器:Spring提供的特殊的Beancode

     ①. Bean 後置處理器容許在調用初始化方法(即:bean 節點 init-method屬性對應的方法的先後)先後對 Bean 進行額外的處理.
     ②. Bean 後置處理器對 IOC 容器裏的全部 Bean 實例逐一處理, 而非單一實例. 其典型應用是: 檢查 Bean 屬性的正確性或根據特定的標準更改 Bean的屬性.
    ③. 對 Bean 後置處理器而言, 須要實現 BeanPostProcessor 接口blog

pulic class PersonPostProcessor implements BeanPostProcessor{
  /**
   *  arg0: IOC容器中bean的實例
   *  arg1: IOC容器中該bean的名字
   */
  @Override
  public Object postProcessorAfterInitialization(Object arg0,String arg1) throws BeansException{
    if(arg0 instanceof Person){
      System.out.println("postProcessorAfterInitialization");
      Person person=(Person)arg0;

      String name=person.getName();
      if(!name.equals("AAAA")){
        System.out.println("name值必須爲AAAA!");
        person.setName("AAAA");
      }
    } 
    return arg0;
  }

  @Override
  public Object postProcessBeforeInitialization(Object arg0,String arg1) throws BeansException {
    System.out.println("postProcessBeforeInitialization");    
    return arg0;
  }
}

④. Bean 後置處理器須要在 IOC 容器中進行配置,但不須要指定 id 屬性,Spring IOC 容器會自動的識別這是個 Bean 後置處理器,自動的使用它。接口

<bean class="com.atguigu.spring.lifecycle.PersonPostProcessor"/>
相關文章
相關標籤/搜索