一、整合步驟:
1 配置classpath,將struts-spring-plugin.jar和spring.jar新增進去
如果少了spring.jar將報錯,提示找不到相關類定義。
2 在web.xml中配置spring
contextconfiglocation
classpath*:meta-inf/spring/**/*-context.xml
使用contextloaderlistener
org.springframework.web.context.contextloaderlistenre
如:
...
4 在struts的action類中使用service
private userservice userservice;
public void setuserservice(userservice userservice)
通過以上方式,便可以直接在action中直接使用service進行邏輯處理。
二、原理分析:
載入方式通常有兩種:
a 通過contextloaderlistener,如前面例子所示;但要求web伺服器支援servlet2.3以上的規範
b 通過contextloaderservlet,不需要伺服器支援servlet2.3以上規範:
... 配置spring配置檔案位置,如上示例
context
org.springframework.web.context.contextloaderservlet
1
然而spring的載入時機在listener方式中是更靠前的。
this.contextloader = createcontextloader();
而contextloader中載入spring配置的**如下:
2 struts2中如何與spring協作:
struts2載入配置檔案的順序為 struts-default.xml/struts-plugin.xml/struts.xml,因此外掛程式中的配置檔案優先順序比預設配置檔案中要高;
struts中的action、result、***例項均通過以
struts.objectfactory常量指定的實現類來建立,該類需要繼承於com.opensymphony.xwork2.objectfactory
檢視struts-default.xml可以找到:
而struts.objectfactory的預設值便是struts,因此預設情況下struts使用org.apache.struts2.impl.strutsobjectfactory來建立action、***等例項。再看看struts-spring-plugin.jar中的xml配置:
於是,在載入了spring外掛程式之後,struts.objectfactory將採用org.apache.struts2.spring.strutsspringobjectfactory
檢視strutsspringobjectfactory的構造方法:
//獲得原先載入的spring的context
...
該類繼承了springobjectfactory,檢視原始碼發現其建立bean的時候都使用了屬於spring的名為autowiringfactory的物件向bean注入了屬性,正如上面看到的
action中的setuserservice被用於注入service;
此外還需要考慮乙個autowirestrategy引數,其指定了自動裝配的策略(屬於spring的範疇),預設是name即按名稱注入。
可以通過修改struts.objectfactory.spring.autowire的常量值來改變autowirestrategy,可選的值包括:name/type(按型別)/auto(由spring自動檢測)/constructor(構造器注入)
三、 另一種整合方式
此處介紹一下另外一種整合的方式:
1 action類與開頭例子一致;
2 struts.xml中配置action的class屬性值為spring配置檔案中的bean名;
3 spring配置對應名稱的bean,class指向真實的action類,此時action更加直觀的由spring管理,獲得了更高的可配置性。
檢視springobjectfactory中的buildbean方法:
//當spring的context中存在bean名的定義時,直接使用spring管理的方式來構造物件,否則走混合注入的方式(開頭例子所採用,也是推薦使用的)怎麼樣,一目了然了吧} else
Struts2學習筆記
1.不繼承,不介面 2.繼承actionsupport類 3.介面action介面 4.我們可以使用modeldriven模式 5.我們可以自己編寫bean進行struts2的擴充套件,但是 一般不需要,因為struts2的功能已經很強大了!6.我們可以將default.properties檔案中的...
Struts2學習筆記
structs修改後自動更新 action執行的時候並不一定要執行execute方法 method add user add success.jsp user add success.jsp 可以在配置檔案中配置action的時候用method 來指定執行哪個方法 user useradd 新增使用...
struts2學習筆記
xml 配置大都是通過 複製 貼上 修改 得到。其中此處 永遠是 url pattern url pattern struts.xml 內 action name hello action 一般用小寫。xml 內寫 時內自動提示設定 原始檔路徑不能有中文。此處複製了乙份dtd檔案到d myeclii...