struts2单例多例问题以及spring整合的问题
来源:互联网 发布:linux开机启动shell 编辑:程序博客网 时间:2024/05/29 16:23
单独的Struts2框架
1.struts2的Action默认是多实例的并非单例,也就是每次请求产生一个Action的对象,即每次访问的参数都被封装在Action的成员变量中。
2.struts2中Action多实例的优势在于是线程安全的,每次请求都会创建单独的Action类来处理,而不用想servlet一样担心线程安全问题。
struts2和spring整合后
会使用spring的注解管理对象,此时action类对象会进入IOC容器被spring管理
尽管struts2本身Action默认是多例的,但spring的IOC容器默认时单例,此时就矛盾了?
那么内部是如何处理的呢?
Spring管理Struts2的Action自动设置为单例。这样Action的生命周期为服务器生命周期,也就是说不关闭应用服务器,Action一直存在,Action中的属性也一直存在。
这样做的好处:
分页对象所需要的数据对象存在于Action中是不被销毁的,直到页面重新对数据对象输入查询条件.
这样做的缺点在于:
1) Struts2的Action是单例,其中的FieldError,actionerror中的错误信息会累加,即使再次输入了正确的信息,也过不了验证.
2) Struts2的Action是有状态的,他有自己的成员属性,所以在多线程下,会有线程安全问题,这是最大的问题。
多个线程会共享一个ActionContext和ValueStack,这样并发访问的时候就会出现问题了.例如造成别人填写的数据被你看到了.又例如,两个线程同时提交向同一个Action提前请求参数或在同一个页面上查询信息,会在提交和查询的先后顺序等条件上产生冲突,导致出来一些意外的问题。
解决办法:
方案一: 就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个Action实例.(建议这样做)
方案二: spring中bean的作用域设为session ,每个session对应一个实例,解决了多线程问题.
总结 :
方案一:bean的作用域设为prototype, 不用担心性能不好, 实际测试过,多实例Action性能没问题.
方案二: 有人担心方案一性能不好, 所有才有了方案二, 不知比方案一性能 能高多少?应该不会高多少。
- struts2单例多例问题以及spring整合的问题
- Spring 与Struts2整合遇到的问题以及解决方案
- struts2 + spring 整合的问题
- struts2 spring hibernate整合的问题
- 关于struts2与spring的整合问题
- 关于struts2-spring整合的问题
- struts2和spring整合问题
- Struts2整合Spring有关问题
- Struts2+Spring +ibatis 整合问题
- struts2+Spring 整合注意会出现的问题
- Spring + Mybatis + Struts2 整合时出现的问题
- Struts2与Spring整合时Action的创建问题
- spring整合struts2遇到的问题一:scope设置
- Struts2+Spring+Hibernate整合的一个小问题
- spring 整合struts2 使用 aop 碰到的问题
- Struts2整合Spring创建的Action同步问题
- Struts2 和spring整合的 Action层托管问题
- struts2与spring整合时的单例问题
- httpClient访问webservice服务--带http头参数
- AlibabaJava开发手册阅读
- PhpStorm2016.2 缩进设置
- 计算两个数的平均数的几种方法解读
- canny边缘检测
- struts2单例多例问题以及spring整合的问题
- RMQ 求区间最值
- 视频播放
- Visible Trees 【容斥】
- 摄像头
- java charset
- 写入视频
- keras 实现BP神经网络
- word开发