1. 程式人生 > >SSH:Struts2與Spring整合核心配置及Jar包引用

SSH:Struts2與Spring整合核心配置及Jar包引用

關於Spring ApplicationContext

1.        從字面上看ApplicationContext就是Application級別的Context(上下文,上下文一般會包含系統級別的請求引數,自定義的資料物件等等),在Spring中ApplicationContext是Java Bean的基礎容器,其具體支援的功能列舉如下:

  • 通過提供Bean工廠方法來訪問應用程式元件(Application Components);
  • 提供通用的方式來訪問檔案資源(File Resources);
  • 釋出事件到已註冊的監聽器(Registered Listeners);
  • 對I18N訊息的訪問處理(Internationalization);
  • 載入多個(有繼承關係)上下文,使得每個上下文都專注於一個特定的層次,比如應用的WEB層。

Spring 為ApplicationContext提供三種實現方式

1. ClassPathXmlApplicationContext(只能讀放在WEB-INF/classes目錄下的配置檔案,如果要使用絕對路徑,需要加上file:字首表示這是絕對路徑;);

2. FileSystemXmlApplicationContext(沒有碟符的是專案工作路徑,即專案的根目錄;有碟符表示的是檔案絕對路徑.);

3. XmlWebApplicationContext(專應用於WEB專案)

Struts2與Spring整合

目的:

1、WEB應用啟動的時候自動獲取Spring的ApplicationContext(根據web.xml的相關配置);

2、 讓Spring為Struts2的Action注入所需的資源物件(一般為業務邏輯的Service元件,這些Servcie元件是面向介面的,也就是說在Struts2的Action類中我們僅僅只需關注Service元件的介面而不用關心起實現,具體實現類及其依賴由Spring來例項化);

原理:

只要匯入了Struts2的spring外掛包(struts2-spring-plugin-version.jar),不需要進行任何額外的配置,Struts2的Action例項物件將由Struts2的Spring外掛建立,該外掛會按照Action的屬性名稱自動從Spring容器中查詢相同名稱的Bean物件對Action進行裝配。

實現:

1、 在Maven的pom.xml中新增一個依賴(以便專案引用struts2-spring-plugin-version.jar):



2、 在web.xml中新增配置項


l  Spring上下文配置檔案的位置;

l  org.springframework.web.context.ContextLoaderListener創建出WebApplicationContext容器物件,並將創建出來的WebApplicationContext物件儲存進了Web應用程式的application作用域中,儲存時的key為WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE這個常量表示的字串,以後在Web應用程式中就可以使用application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)語句,或Spring提供的工具方法WebApplicationContextUtils.getWebApplicationContext(application)來獲得 spring容器物件。ContextLoaderListener使用contextConfigLocation這個ServletContext初始化引數來指定WebApplicationContext容器物件的配置檔案,如果沒有配置contextConfigLocation這個ServletContext的初始化引數,ContextLoaderListener則預設使用/WEB-INF /applicationContext.xml作為配置檔案。

3、在Spring配置檔案:spring-config.xml中注入相關Action的依賴


可以看到,TestAction這個Struts2的Action類所依賴的Service元件由Spring配置檔案來配置並由Spring IoC容器來實現依賴注入。

4、在Struts2的Action類中通過Annotation來指定Spring中配置的BeanId(testAction)