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 ...
随机推荐
- JUC之集合中的线程安全问题
集合线程安全问题 JDK Version:9 首先说下集合线程安全是什么:当多个线程对同一个集合进行添加和查询的时候,出现异常错误. 复现例子: package com.JUC; import jav ...
- XML解析的四种方式
1.说明 XML是EXtensible Markup Language, 即可扩展标记语言, 是一种通用的数据交换格式, 它的平台无关性.语言无关性.系统无关性, 给数据集成与交互带来了极大的方便. ...
- SpringBoot集成Actuator监控管理
1.说明 本文详细介绍Spring Boot集成Actuator监控管理的方法, 基于已经创建好的Spring Boot工程, 然后引入Actuator依赖, 介绍监控管理相关功能的使用. Sprin ...
- .net core的配置介绍(三):Options
前两篇介绍的都是已IConfiguration为基础的配置,这里在说说.net core提供的一种全新的辅助配置机制:Options. Options,翻译成中文就是选项,可选择的意思,它依赖于.ne ...
- MYSQL修改配置文件之后无法重启服务
错误:修改配置文件my.ini之后无法重启服务. 原因:以记事本方式打开my.ini文件修改完之后保存.保存之后文本编码格式为操作系统默认格式utf-8.my.ini格式要是ANSI才可以正常启动服务 ...
- Servlet部署描述符
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512237744641540612/ <Servlet简单实现开发部署过程>中的过程,可以概括为以下模 ...
- 微信小程序封装mixins方法
在app.js中这样引入 import '@src/utils/mixins' mixins函数如下 /** * 封装类似vue的混入功能 */ let native = Page Page = (o ...
- php伪协议总结
本篇总结下一些封装协议,涉及的相关协议:file://.php://filter.php://input.zip://.compress.bzip2://.compress.zlib://.data: ...
- 《剑指offer》面试题57. 和为s的两个数字
问题描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], tar ...
- 《剑指offer》面试题58 - II. 左旋转字符串
问题描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两 ...