1. 程式人生 > >Struts2+Spring整合後Action物件建立方式

Struts2+Spring整合後Action物件建立方式

1、Spring容器建立:(web.xml中配置)

Xml程式碼  收藏程式碼
  1. <!-- spring配置檔案-->  
  2.     <context-param>  
  3.         <param-name>contextConfigLocation</param-name>  
  4.         <param-value>WEB-INF/classes/com/zjy/gpx/config/applicationContext*.xml</param-value>      
  5.     </context-param>  
  6.     <!-- Spring監聽器,隨web應用啟動初始化Spring容器  -->
      
  7.     <listener>  
  8.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  9.     </listener>  

 2、action建立的兩種方式,第一種由Spring負責管理:

struts.xml檔案中

Xml程式碼  收藏程式碼
  1. <!-- spring來管理action物件的建立 -->  
  2.     <constant name="struts.objectFactory"
     value="spring" />  
  3. <!-- 省,市,縣地區選擇 -->  
  4.         <action name="city_*" class="coreCityAction" method="{1}">  
  5.             <result name="success">/success.jsp</result>  
  6.             <result name="error">/error.jsp</result>  
  7.         </action>  

applicationContext檔案中:

Xml程式碼  收藏程式碼
  1. <bean id="coreCityAction" class="com.zjy.gpx.struts.CoreCityAction">  
  2.         <property name="coreCityService" ref="coreCityService" />  
  3.     </bean>  

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檔案(和未整合前一致)

Xml程式碼  收藏程式碼
  1. <action name="relogin" class="com.xxt.user.action.LoginAction">  
  2.             <result name="input" type="freemarker">/login/index.ftl</result>  
  3.             <result name="error" type="freemarker">/error.ftl</result>  
  4.         </action>  

 applicationContext檔案中:(一個簡單的Bean)

Xml程式碼  收藏程式碼
  1. <bean id="loginService"  
  2.         class="com.xxt.user.service.impl.LoginServiceImpl">  
  3.         <property name="dbs" ref="dbs"></property>  
  4.     </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名保持一致,且程式碼可讀性差些。

相關推薦

Struts2+Spring整合Action物件建立方式

1、Spring容器建立:(web.xml中配置) Xml程式碼   <!-- spring配置檔案-->       <context-param>           <param-name>contextConfigLoc

mybatis與spring整合,#方式查詢速度特別慢解決

首先看下#{},${}區別 這裡引用別人總結的 在這次專案開發中,sql語句非常長,傳入引數雖然才有一個日期,但是在語句中#{date}的佔位多達20多個,這樣就造成解析過慢,引數生成再到語句就差不多要2分鐘,查詢出來耗時3分鐘,後來實在沒辦法,在捨棄了防止sql注入的安全下。使

Spring概念和三種物件建立方式

目錄 概念 Spring IOC ( 反轉控制) DI(依賴注入) BeanFactory ApplicationContext Bean元素的scope屬性 三種物件建立方式 構

Spring整合Quartz的3種方式

1.使用xml配置方式 Maven依賴 <properties> <!-- spring版本號 --> <spring.version>4.2.2.RELEASE</spring.version>

Spring Boot專案幾種建立方式

Spring Boot為新一代開發框架,關於框架的詳細資訊,各位可以網上自行搜尋,本篇博文主要介紹一下如何建立一個Spring Boot的專案。因為本次介紹的幾種建立方式都是基於Maven的,所以請各位看官再繼續閱讀之前請先準備好Maven的環境,好了,下面我們

Spring 整合hibernate 無法自動建立表,控制檯沒有報錯

症狀 Spring 整合hibernate 無法自動建立表,控制檯沒有報錯 百度了幾天了 主要有一下幾個原因 1、  注意name="hibernate.dialect" 而不能是name="dialect"     &n

Spring bean的三種建立方式

1、建立Spring工程 使用eclipse建立一個Spring工程,一個簡單的方法就是先建立一個Java工程,然後將Spring的Jar包全部放入到工程裡面即可開始編寫基於Spring框架的程式。Spring的Jar包可以從github上的原始碼中取得,下載地址是:。

spring整合activemq傳遞物件注意事項

初衷:兩個專案分別部署在兩臺伺服器上,專案之間以activemq傳遞object訊息 拓樸結構: 伺服器A:tomcat,專案A--生產者 伺服器B:tomcat、activemq、專案B--消費者 專案A主要程式碼 src/main/resources/ActiveMQ

javascript最常用的物件建立方式

1 //第一種 2 function Demo(){ 3 var obj=new Object(); 4 obj.name="Yubaba"; 5 obj.age=12; 6 obj.firstF=function(){ 7 } 8

spring整合hibernate的兩種方式

       我們學過spring的同學都知道,spring可以整合其他的框架協同開發,大大的降低開發的時間和提高了效率,但是我們在配置的時候總會發生各種各樣的問題,下面我記錄一下我在配置的時候出現的

struts2使用註解配置Action傳參方式

@Action(value = "operatorRoleAction", results = { @Result(name = "view", location = "/bussiness/operatorrole_view.jsp", type = "dispatche

Spring整合Mybatis【自動掃描方式

一、Spring配置檔案: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="h

Spring系列教程七: Spring 整合mybatis的四種方式

一、使用採用資料對映器(MapperFactoryBean)的方式註解實現整合mybatis 不用寫mybatis對映檔案,採

Spring整合Struts2框架的第一種方式ActionStruts2框架來創建)。在我的上一篇博文中介紹的通過web工廠的方式獲取servcie的方法因為太麻煩,所以開發的時候不會使用。

rac println 需要 如果 value const tps http 建立 1. spring整合struts的基本操作見我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,這裏面將spring與st

Spring(五):Spring&Struts2&Hibernate整合,實現查詢Employee信息

view event last .html ssh tla url 配置文件 hid 背景:   基於之前兩篇文章《Spring(三):Spring整合Hibernate》、《Spring(四):Spring整合Hibernate,之後整合Struts2》,了解了

Spring整合Struts2和Hibernate+Maven(一)之Maven專案建立

趁著畢設的功夫,寫一些東西。也算是記錄個人平時畢設完成的過程。 建立專案 工具:intellij idea+JDK1.6+Maven 第一步:New Project ->點選左側maven ->勾選Create fromarchetype 後選擇maven-archet

javaEE Mybatis,Mybatis與Spring整合之動態代理方式(推薦),自動建立Dao層實現類

src/applicationContext.xml(Spring核心配置檔案): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or

2 struts2 Action類的三種建立方式

目前都在使用繼承ActionSupport類的方法,因為實現了很多方法。 1.直接建立Java類 package action; /** * 測試action用類 * action類必要條件:public修飾符 返回值String * 需要在strust.xm

spring容器建立bean物件方式

1)xml檔案中有bean的配置,而且這個bean所對應的java類中存在一個無參構造器,那麼這個時候spring容器就可以使用反射呼叫無參構造器來建立例項了(常規的方式) 2)通過工廠類獲得例項(工廠類實現了介面FactoryBean<?>) 例如: xml中的配置

07.Spring-配置詳解-Spirng建立物件的三種方式

測試類 package vc.helloworld.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springfra