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对象的好处??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值