struts的Action管理由谁来?

这几天终于把ssh整合好了,搞了几天,困难重重啊,整合玩了似乎又没什么了

在struts的Actiong管理的时候,出了很多麻烦:

当指定struts.objectFactory为spring时,struts2框架就会把bean转发给spring来创建,装配,注入。但是bean创建完成之后,还是由struts容器来管理其生命周期。配置方式:

在struts.xml中需要加上:

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

在struts.propeties中加上:

java 代码 struts.objectFactory=spring


如果在struts.xml文件里面这样配置:

<action name="login" class="com.hb.action.UserAction" method="login">

那么:这样是由struts插件产生的,但是在Action里面有依赖于其它的bean,也会被自动注入进来,自动注入的bean是由spring产生的,struts会先去自动匹配名字相同的,没有就按类型。Action实例是以prototype方式创建的,spring会为每个请求创建一个action的实例。

当我们想需要spring来完全管理Action的时候,我们可以在beans.xml文件里面加:

<bean id="user" class="com.hb.action.UserAction"/>

再在struts.xml文件的映射文件配置为:

<action name="login" class="user" method="login">
这样即可.

在由spring管理的时候我们需要关注的是要需要注意的一个地方:Spring中的缺省作用域是Singleton作用域。而往往Action属于有状态的bean,应该使用prototype作用域。<bean id="user" class="com.myapp.web.action.user.UserAction" singleton="false"/> 如果忽略这个细节,在我们方便实用set,get方法处理数据的时候,可能会有线程安全上的风险

你可能感兴趣的:(struts的Action管理由谁来?)