Struts2+Spring整合後Action物件建立方式
1、Spring容器建立:(web.xml中配置)
- <!-- spring配置檔案-->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>WEB-INF/classes/com/zjy/gpx/config/applicationContext*.xml</param-value>
- </context-param>
- <!-- Spring監聽器,隨web應用啟動初始化Spring容器 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
2、action建立的兩種方式,第一種由Spring負責管理:
struts.xml檔案中
- <!-- spring來管理action物件的建立 -->
- <constant name="struts.objectFactory" value="spring" />
- <!-- 省,市,縣地區選擇 -->
- <action name="city_*" class="coreCityAction" method="{1}">
- <result name="success">/success.jsp</result>
- <result name="error">/error.jsp</result>
- </action>
applicationContext檔案中:
- <bean id="coreCityAction" class="com.zjy.gpx.struts.CoreCityAction">
- <property name="coreCityService" ref="coreCityService" />
- </bean>
這裡是通過Spring來負責建立Action物件,這個工作是通過Struts2提供的Spring外掛struts-spring-plugin完成的,外掛文件地址:http://struts.apache.org/release/2.0.x/docs/spring-plugin.html
struts.xml檔案中action配置的class屬性對應spring配置檔案中Bean的id名,當struts2將請求轉發給指定的Action時,struts.xml中的Action就是個“偽”Action,因為它的class屬性不是一個真實的類,而它指定的是spring容器中Action例項的id。
注意:由Spring負責建立action物件的時候一般要加上scope屬性,比如:scope = "prototype",因為spring預設生成的Bean是單例的,而struts2負責生成的action是多例的,每個action值棧中都對應一個請求存放不同的區域性變數,所以這裡需要加上scope屬性。
這種方式不足之處:必須把所有action配置在spring中,而且struts.xml還要寫生一個偽action,導致配置檔案臃腫;
3、第二種方式:Spring的自動裝配,Action會自動從Spring容器中獲取邏輯層元件(service)
struts.xml檔案(和未整合前一致)
- <action name="relogin" class="com.xxt.user.action.LoginAction">
- <result name="input" type="freemarker">/login/index.ftl</result>
- <result name="error" type="freemarker">/error.ftl</result>
- </action>
applicationContext檔案中:(一個簡單的Bean)
- <bean id="loginService"
- class="com.xxt.user.service.impl.LoginServiceImpl">
- <property name="dbs" ref="dbs"></property>
- </bean>
action方法中有LoginServiceImpl loginService = null;然後setter()方法。
基本流程是這樣的,這種情況還是由Struts2自己建立Action物件,建立後的物件會去Spring容器中尋找它成員變數對應的Bean,預設的自動裝配策略是按照名字來匹配的。
通過設定struts.objectFactory.spring.autoWire常量來改變Spring裝配策略。幾個常用的值:
name、type、auto、constructor,這個和Spring自身的轉配策略是相同的。
這種方式優點:struts.xml檔案和未整合前是一致的,主要是要在spring配置檔案中定義邏輯層的Bean,相比前一種好處就是簡化配置檔案。
缺點:如果採用預設自動裝配策略,action類中的成員變數名要和spring中Bean id名保持一致,且程式碼可讀性差些。
相關文章
- JavaScript物件與建立物件的方式JavaScript物件
- JavaScript 建立物件的方式JavaScript物件
- js建立物件的方式JS物件
- Struts2教程之二Action建立方式
- java建立物件的五種方式Java物件
- javascript建立物件的三種方式JavaScript物件
- Object 提供的物件建立方式Object物件
- js建立物件的幾種方式JS物件
- JavaScript 建立物件的七種方式JavaScript物件
- javascript建立物件的幾種方式JavaScript物件
- 建立Session物件的兩種方式Session物件
- js物件導向設計---建立物件的方式JS物件
- Java中建立物件的5種方式Java物件
- js中建立物件的幾種方式JS物件
- JavaScript 建立類/物件的幾種方式JavaScript物件
- JavaScript物件的建立方式有幾種?JavaScript物件
- js中建立物件的幾種常用方式JS物件
- [轉載]javascript建立物件的幾種方式JavaScript物件
- 一個人就需要物件之js中八種建立物件方式物件JS
- JavaScript新的物件建立方式---Object.create()JavaScript物件Object
- 好程式設計師分享JavaScript建立物件的方式!程式設計師JavaScript物件
- JS 基礎篇(一):建立物件的四種方式JS物件
- structs2的action實現方式Struct
- Redux概念之三: Action(動作)與Action Creator(動作建立器)Redux
- 在 .NET 中建立物件的幾種方式的對比物件
- javascript一種新的物件建立方式-Object.create()JavaScript物件Object
- JavaScript 深入之建立物件的多種方式以及優缺點JavaScript物件
- JavaScript深入之建立物件的多種方式以及優缺點JavaScript物件
- 在身份認證後建立使用者物件ICurrentUser物件
- 在 Github Action 管道內整合 Code Coverage ReportGithub
- PHP 物件導向 (七)訪問物件的方式及後期靜態繫結PHP物件
- 【JS系列】一起理解物件的7種建立方式(全)JS物件
- Struts2筆記05 action操作域物件筆記物件
- 物件建立模式物件模式
- JS 建立物件JS物件
- JavaScript建立物件JavaScript物件
- js建立物件JS物件
- SpringMVC 執行一個action之後跳轉到下一個actionSpringMVC