我是靠谱客的博主 激动小蝴蝶,最近开发中收集的这篇文章主要介绍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名保持一致,且代码可读性差些。

 

由spring创建action对象的好处??

最后

以上就是激动小蝴蝶为你收集整理的Struts2+Spring整合后Action对象创建方式的全部内容,希望文章能够帮你解决Struts2+Spring整合后Action对象创建方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部