struts2學習筆記之spring整合

2021-05-31 23:39:13 字數 2640 閱讀 4235

一、整合步驟:

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...