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)