struts2和spring的两种整合方式

首先,来看看如何让Spring 来管理Action.


在struts.xml中加入

<constant name="struts.objectFactory" value="spring" />


有两种整合方式:
(1) 把Action配置在beans.xml里,利用Spring初始化Action的bean

将Struts的业务逻辑控制器类配置在Spring的配置文件中,Action中引用的业务类一并注入。
(这样的处理,必须将action类的scope配置成property)
Xml代码
<bean id="LoginAction" class="yaso.struts.action.LoginAction">
       <property name="loginDao" ref="LoginDao"/>
</bean>

接着,在struts.xml或者等效的Struts2配置文件中配置Action时,指定<action>的class属性为Spring配置文件中相应bean的id或者name值。示例如下:
Xml代码
<action name=”LoginAction” class=”LoginAction>
       <result name=”success>/index.jsp</result>
</action>


 (2) 不需要在beans.xml里配置Action,利用Struts-Spring_Plugin插件自动初始化Action


业务类在Spring配置文件中配置,Action不需要配置,Struts2的Action像没有整合Spring之前一样配置,<action>的class属性指定业务逻辑控制器类的全限定名。

Action中引用的业务类不需要自己去初始化,Struts2的Spring插件会使用bean的自动装配将业务类注入进来,其实Action也不是Struts2创建的,而是Struts2的Spring插件创建的。默认情况下,插件使用by name的方式装配,可以通过增加Struts2常量来修改匹配方式:设置方式为:struts.objectFactory.spring.autoWire = typeName,可选的装配参数如下:


 name:相当于spring配置的autowrie="byName"(默认)
 type:相当于spring配置的autowrie="byType"
 auto:相当于spring 配置的autowrie="autodetect"
 constructor: 相当于spring配置的autowrie="constructor"

OK,这里说了配置部分,但是,这里有一个问题, 就是Spring管理Action,如果按照第一方式,那么只要通过scope="property"来配置为每个请求创建一个Action实例。 那么第二种方式,我们并没有指定Action的作用域。

(好似也没有地方可配……),那么,这样的整合方式,Action的创建到底是单例还是多例的呢?
答案:也是每个请求一个实例.

转载请标明出处:http://www.cnblogs.com/taoxiaoji

posted on   淘小鸡  阅读(18143)  评论(3编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库

导航

< 2011年3月 >
27 28 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

统计

点击右上角即可分享
微信分享提示