[转]Struts2 是如何把Action交给Spring托管

例1:

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

1.在struts.xml中加入 <constant name="struts.objectFactory" value="spring"/> 
有两种整合方式:
     (1) 将Struts的业务逻辑控制器类配置在Spring的配置文件中,Action中引用的业务类一并注入。

(这样的处理,必须将action类的scope配置成prototype)

Xml代码  

  1. <bean id="LoginAction" class="yaso.struts.action.LoginAction">
  2. <property name="loginDao" ref="LoginDao"/>
  3. </bean>

接着,在struts.xml或者等效的Struts2配置文件中配置Action时,指定<action>的class属性为Spring配置文件中相应bean的id或者name值。示例如下:

Xml代码  

  1. <action name=”LoginAction” class=”LoginAction”>
  2. <result name=”success”>/index.jsp</result>
  3. </action>

(2) 业务类在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"

例2:

java struts2中的action如何交由spring管理

struts2.xml中加入<constant name="struts.objectFactory" value="spring"></constant>添加struts2-spring-plugin的jar包,action配置的class改为spring的bean id值

追问:

这就是必须加的吗<constant name="struts.objectFactory" value="spring"></constant>我看有的整合就不用这句话

追答:

可以不用加,struts看到有struts2-spring-plugin时会自动识别的

例3:

把struts2的action交给spring去 管理和注入属性, struts.xml怎么写

添加:struts2-spring-plugin.jar在struts2的xml文件里面添加一句:<constant name="struts2.ObjectFactory" value="Spring"/>这一句如果你的struts2版本比较高,也可以不要加这个,因为他内部已经默认添加了这句然后<action  name="" class="..."/>这个name属性就是引用spring配置里面的bean的id

其他的都和以前一样写
时间: 2024-10-25 14:27:12

[转]Struts2 是如何把Action交给Spring托管的相关文章

Struts2和SpringMVC的action是单例还是原型的?

struts2的acion单独使用的时候应是多例的,也就是原型(prototype). 因为它是基于类开发的,它的三种获取页面传参的方式都是通过成员变量的方式来接受的. 如果用struts2框架基于方法的形式进行开发(一个方法对应一个请求处理的话),那么意味着这多个方法都可以共享成员变量.这时候,那么就可能会出现并发问题:不同的请求对同一个实例中的成员变量一起操作,出现数据安全问题.比如前一个人的密码可能被后面的人看到,提交的数据被修改等. 这就是为什么struts2为什么是多例的原因. 值得注

Struts2基于注解的Action配置

使用注解来配置Action的最大优点就是能够实现零配置,可是事务都是有利有弊的.使用方便.维护起来就没那么方便了. 要使用注解方式,我们必须加入一个额外包:struts2-convention-plugin-2.x.x.jar. 虽说是零配置的,但struts.xml还是少不了的,配置例如以下: <? xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apa

JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用

Struts2框架介绍 三大框架:是企业主流JavaEE开发的一套架构.Struts2 + Spring + Hibernate 什么是框架?为什么要学习框架? 框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发. Struts2与MVC? Struts是一款优秀的MVC框架 MVC:是一种思想,是一种模式,将软件分为Model模型.View视图.Controller控制器 JAVAEE软件三层架构:web层(表现层).业务逻辑层.数据持久层(Sun提供javaEE开发规范) Jav

Struts2利用注解实现action跳转

使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plugin-2.x.x.jar. 实例为例,供参考: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//

struts2基于注解的action

使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plugin-2.x.x.jar.  虽说是零配置的,但struts.xml还是少不了的,配置如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apach

Struts2整体回顾 之 Action,拦截器,值栈及关联关系

一.首先看一下当我们使用Struts时,一个请求所走的流程. 二.值栈的示意图 三.一个请求中,拦截器和值栈的时序图 4.请求.值栈结合图 Struts2整体回顾 之 Action,拦截器,值栈及关联关系,布布扣,bubuko.com

Struts2框架学习(二) Action

Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器拦截请求,创建代理Action对象,执行方法,返回结果,界面跳转. 拦截器解析请求路径,获取Action的名称,到配置文件中查找action的完整类名,利用反射创建对象. 每请求一次,就创建一个对象,所以action是多例的,也是线程安全的. 2,关系 请求的路径和配置文件的对应关系: 配置文件中包

struts2中&lt;welcome-file&gt;index.action&lt;/welcome-file&gt;直接设置action,404的解决方案

这几天的项目页面的访问全部改为.action访问,在修改首页时遇到了问题.将web.xml文件中<welcome-file>index.action</welcome-file>修改成这样,访问首页时报404错误,也就是说文件找不到.上网查了有两种解决方法.     方法一.在WebRoot下新建一个index.action空文件,这个方法简单实用,强烈推荐.    方法二.因为 welcome-file 必须是实际存在的文件,不能是action或者servlet路径你可以设置一个

Struts2基础学习(二)&mdash;Action

一.ActionSupport      为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范.下面是标准Action接口的代码: public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public