程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring的執行順序

Spring的執行順序

編輯:關於JAVA

1.Spring的加載(實例化)

如果不與Struts整合的話,Spring的加載是在Web程序的web.xml中配置的,在web.xml 中有兩種選擇,一種是ContextLoaderListener,另一種是ContextLoaderServlet。

如果與Struts進行整合,則Spring的加載是在struts-config.xml中配置的。

2.容器後處理器

在容器實例化之後可以對Spring容器進行一些操作,這個通過實現接口BeanFactoryPostProcessor接口來實現,該接口有一個方法void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory)。這個接口有兩個很有用的實現類,是Spring已經實現好的,它們是PropertyPlaceholderConfigurer(屬性占位符配置器)和PropertyOverrideConfigurer(另一種屬性占位符配置器)。

3.與Spring容器的交互

對容器的處理操作結束以後,我們就能和Spring容器進行交互了,我們可以實現FactoryBean,FactoryBeanAware接口等方法獲取BeanFactory實例,然後用之。

4.配置bean和依賴關系

這包括配置依賴,注入屬性值,注入field值,注入方法返回值,bean的繼承。這些配置的過程中還包括配置強制初始化bean(depends-on),自動裝配(autowire),依賴檢查(dependency-check),這三項都是bean的屬性(不是子元素)。

5.對容器中的bean實例化的管理——bean後處理器

bean後處理器必須實現BeanPostProcessor接口,該接口中有兩個方法,一個是Object postProcessBeforeInitialization(Object bean,String name) throws BeansException 和 Object postProcessAfterInitialization(Object bean,String name) throws BeansException,前一個方法是在實例化之前對該bean進行處理,後一個方法是在實例化之後對該bean進行處理。

6.對bean生命周期的管理

對bean生命周期的管理有兩個時機:一,在注入依賴關系之後;二,在即將銷毀bean之前。

在注入依賴關系之後管理有兩種方式:一,使用init-method屬性;二,InitialingBean接口,它只有一個void afterPropertiesSet() throws Exception方法。

在bean銷毀之前管理時也有兩種方式:一,使用destroy-method屬性;二,DisposableBean接口,它只有一個void destroy() throws Exception方法。

這裡要說明的是,如果同時配了屬性,也實現了方法。則先執行接口的方法,再執行配置的屬性指定的方法。

如果既用了bean後處理器,有對bean的生命周期進行管理,則執行的順序是:Object postProcessBeforeInitialization(Object bean,String name) throws BeansException,void afterPropertiesSet() throws Exception,init-method,Object postProcessAfterInitialization(Object bean,String name) throws BeansException。

7.創建bean實例

創建bean實例有三種方法:

1.調用構造器創建一個bean實例。

2.BeanFactory調用某個類的靜態工廠方法創建bean。

3.BeanFactory調用實例工廠方法創建bean。

8.依賴注入

注入的順序是先實例化本bean(它需要容器向它注入其它的bean),在實例化用來向本bean注入的bean,然後執行注入。當然,這種順序是可以改變的,可以用強制實例化bean來改變這種順序。強制實例化bean在前面已經說過。

注入的方式有兩種,一種是設值注入,另一種是構造注入。

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved