Spring IOC容器管理struts2中遇到的一些问题
来源:互联网 发布:js阻止超链接跳转 编辑:程序博客网 时间:2024/05/16 04:45
情景描述:
图片上传Action中主要功能是图片上传与压缩,生产环境出现原图与缩略图不一致?(开发环境没有出现过)
初步怀疑是高并发导致。
自己的思路:因为知道struts2是线程安全的,每个请求都会新建一个action实例,所以排除了不同请求,成员变量共享问题。然后一直检查代码…最后想到struts2是交给spring IOC容器管理的,是不是这块有问题。
于是网上找了,果然如此。
结论:
Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。所以我们可以在Struts2的Action里面去定义属性。但是Struts2由于 Action和普通的Java类没有任何区别(也就是不用像Struts1里面那样去实现一个Struts的接口,有兴趣的朋友可以自己去了解),所以我们可以用Spring去管理Struts2的Action,这个时候我们就要注意了,因为当我们在spring里面去定义bean的时候,spring默认用的是单例模式。所以在这个时候,你就要修改Spring的配置文件—即修改scope为prototype。
为什么struts1中并没有考虑到线程问题,因为所有的代码都是写在execute的方法中,所有变量都是定义在里面,所以没有线程安全问题。
而现在的struts2就不一样了。struts2的action中就像一个POJO一样,定义了很多的类变量。这就有线程安全问题了。。此时,就使用scope=prototype来指定是个原型模式,而不是单例,这样就解决了线程安全问题。每个线程都是一个新的实例。
这是strus2官方文档中的一句话:Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.不懂的自己脑补吧….
- Spring IOC容器管理struts2中遇到的一些问题
- Spring动态获取IoC容器中管理的Bean
- struts2学习中遇到的一些问题
- spring的IOC 容器管理 Bean
- 【Spring】1 Spring IoC容器中组件管理 基础
- struts2的容器和spring的容器在产生actionbean时遇到的问题
- Spring IOC容器中Bean的生命周期
- Spring IOC容器中Bean的生命周期
- Spring中IOC容器的初始化过程
- SSH中.动态获取spring IoC容器中管理的bean,dao
- SSH中.动态获取spring IoC容器中管理的bean,dao
- SSH中.动态获取spring IoC容器中管理的bean,dao
- spring的Ioc容器
- Spring的IoC容器
- spring的IOC容器
- Spring 的IOC 容器
- spring data jpa中继承JpaSpecificationExecutor接口的接口不会被IOC容器所管理
- 在Struts2中整合Spring的IoC
- 内存字节对齐
- onConfigurationChanged
- c语言libcurl网络http操作编程库使用
- 让UNION与ORDER BY并存于SQL语句当中
- 如何在线操作监听日志listener.log
- Spring IOC容器管理struts2中遇到的一些问题
- CSS格式化排版
- Solr字段ExternalFileField使用
- static
- ZOJ 题目3747 Attack on Titans(DP)
- Spark学习笔记之-Spark-Streaming
- shell脚本执行返回的状态码
- 如何获取当前执行Assembly的位置
- Mac环境下svn的使用