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