Spring与Struts2整合时action自动注入的问题
当Struts和Spring框架进行整合时,原本由action实例化对象的过程移交给spring来做(这个过程依赖一个叫struts2-spring-plugin的jar包,这个包主要的功能就是实现刚才那句话,但是MyEclipse自动生成Spring框架时并没有这个jar包,所以需要手动下载后导入)。
把这个包打开会发现有一个叫struts-plugin.xml的配置文件
struts-plugin.xml
1 <struts>
2 <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
3
4 <!-- Make the Spring object factory the automatic default -->
5 <constant name="struts.objectFactory" value="spring" />
6
7 <constant name="struts.class.reloading.watchList" value="" />
8 <constant name="struts.class.reloading.acceptClasses" value="" />
9 <constant name="struts.class.reloading.reloadConfig" value="false" />
10
11 <package name="spring-default">
12 <interceptors>
13 <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
14 </interceptors>
15 </package>
16 </struts>
这个配置文件中加了<constant name="struts.objectFactory" value="spring" />,所以就不需要在struts.xml中再次添加了。
ApplicationContext.xml
1 ...
2 <bean id="userAction" class="action.UserAction" scope="prototype">
3 <property name="userDAO" ref="userDAO" />
4 </bean>
5 ...
这里需要注意一下,再Spring配置文件中一定要加上scope这个属性,取值为’prototype’。首先得知道Spring框架生成userAction是单例的,而Structs2框架是多例的,也就是说struts2每请求一个action就会实例化一个action对象,但是Spring只会实例化一次(也就是第一次的数据),这就会导致当多次请求时会出现数据错误的情况。而当我们把scope值设为’prototype’之后,Spring就会跟struts2一样,多少次请求就实例化多少个action对象,互不影响,数据也不会出错。
struts.xml
1 ...
2 <action name="login" class="userAction" method="login">
3 <result name="admin">/main.jsp</result>
4 <result name="reader">/reader.jsp</result>
5 <result name="error">/error.jsp</result>
6 <result name="input">/userLogin.jsp</result>
7 </action>
8 ...
struts.xml中action标签中的class就可以直接写ApplicationContext.xml中bean的id值了,由Spring容器来实例化,但还是由Struts2来管理,因为ApplicationContext.xml中设置了scope属性,也不用考虑数据出错的情况。
Spring与Struts2整合时action自动注入的问题的更多相关文章
- spring和hibernate整合时无法自动建表
在使用spring整合hibernate时候代码如下: <property name="dataSource" ref="dataSource" /> ...
- spring和hibernate整合时设置自动生成数据库的表
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFa ...
- spring与struts2整合出现错误HTTP Status 500 - Unable to instantiate Action
在进行spring和struts2整合的时候因为大意遇到了一个问题,费了半天神终于找到了问题所在,故分享出来望广大博友引以为戒!! 我们都知道在spring和struts2整合时,spring接管了a ...
- Spring与Struts2整合VS Spring与Spring MVC整合
Spring与Struts2整合,struts.xml在src目录下 1.在web.xml配置监听器 web.xml <!-- 配置Spring的用于初始化ApplicationContext的 ...
- spring boot 中@Autowired注解无法自动注入的错误
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/huihuilovei/article/de ...
- spring和mybatis整合时Access denied for user '***'@'localhost' (using password: YES)错误的解决方案
参考文章:博客园文章 参考解决办法: 将数据库配置文件格式 key=value 改为 jdbc.key=value 以下为问题分析 使用Spring + Mybatis + Mysql整合时,测试报错 ...
- Spring Ioc源码分析系列--自动注入循环依赖的处理
Spring Ioc源码分析系列--自动注入循环依赖的处理 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到Spring创建bean出现循环依赖的时候并没有深入去分 ...
- Spring与Struts2整合
Spring与Struts2为什么要整合呢? 把Action实例交给Spring来管理!! 1.单独测试Struts是否添加成功(jar包和配置文件),先单独测试,不要整合之后再测试,容易出问题 we ...
- Spring容器是如何实现 Bean 自动注入(xml)
入口web.xml web.xml 配置文件 <!-- Spring Config --> <listener> <listener-class>org.sprin ...
随机推荐
- 【C#】C#中使用GDAL3(三):Windows下编译插件驱动
转载请注明原文地址:https://www.cnblogs.com/litou/p/15720236.html 本文为<C#中使用GDAL3>的第三篇,总目录地址:https://www. ...
- 【17MKH】我在框架中对.Net依赖注入的扩展
说明 依赖注入(DI)是控制反转(IoC)的一种技术实现,它应该算是.Net中最核心,也是最基本的一个功能.但是官方只是实现了基本的功能和扩展方法,而我呢,在自己的框架 https://github. ...
- SpringBoot 之 整合JDBC使用
导入相关依赖: # pom.xml <dependency> <groupId>org.springframework.boot</groupId> <art ...
- 初识python 之 爬虫:爬取某网站的壁纸图片
用到的主要知识点:requests.get 获取网页HTMLetree.HTML 使用lxml解析器解析网页xpath 使用xpath获取网页标签信息.图片地址request.urlretrieve ...
- 从一堆 JAR 文件中,找出一个 Java class 文件的所在配置
Find a class somewhere inside dozens of JAR files? find path/to/libs -name '*.jar' -exec grep -Hls C ...
- js对cookie的操作:读、写、删
js读写cookie //JS操作cookies方法!//写cookiesfunction setCookie(name,value){var Days = 30;var exp = new Date ...
- Jarvis OJ--PHPINFO
一道浙大的题目 题目地址:http://web.jarvisoj.com:32784 拿到这道题目, 是一道反序列化的题目,题目源码很简单,当创建OowoO()这个类的对象时,会自动调用__const ...
- kubernetes运行应用2之DaemonSet详解
kubernetes运行应用1之Deployment详解 查看daemonset 如下,k8s自身的 DaemonSet kube-flannel-ds和kube-proxy分别负责在每个结点上运 ...
- ctf--web刷题记录 ACTF2020back up file 、极客大挑战2019php、secret file
ACTF2020back up file backup file指的是备份文件,一般备份文件的后缀有".git" .".svn"." .swp&quo ...
- 【C++】类-基础知识
类-基础知识 目录 类-基础知识 1. 语法定义 2. 类的实现 3. 三个基本的函数 3.1 构造函数 功能 形式 调用时机 默认构造函数 3.2 复制构造函数 功能 形式 调用时机 3.3 析构函 ...