`

Spring单例的Action Bean的成员属性的使用注意

阅读更多

 

     今天在做系统优化查看生产环境日志的时候发现一个java.util.ConcurrentModificationException异常,在网上查看异常原因后,以为是这段代码的逻辑问题(在对ArrayList做迭代时对其进行了修改),后来找到对应的代码(在一个Action里)并没有发现导至这个异常对应的代码。

 

    再仔细查看后发现被迭代的ArrayList对象属于类的成员属性,那么问题就找到了:当第一个用户访问这个Action方法正在对这个ArrayList做迭代时,另一个用户恰巧也访问的了这个Action对并对上个用户正在做迭代的对象做了修改(删除元素等),因为项目中Spring指定的Bean的模式是单例的,所以多次访问到的是同一个Bean实体对象,类的成员属性是“共享”的,就导至了上述的问题。

 

    解决:先注掉对应的类的成员属性,有需要使用的地方重新new一个对象,之后本地测试没问题。

 

java.util.ConcurrentModificationException异常的详细说明:

http://www.cnblogs.com/dolphin0520/p/3933551.html

 

 

 

 

分享到:
评论

相关推荐

    笔试题(SSH) .doc

    5. 在默认配置下,Struts2的Action是单例的,因此需要注意线程安全问题。如果Action中存在成员变量,需要确保它们是线程安全的,或者使用多例模式。 6. OGNL(Object-Graph Navigation Language)是强大的表达式...

    SSH面试题

    - 如果使用Spring框架,可以通过将Action的scope设置为`prototype`,使每次请求都能创建一个新的Action实例。 - **Struts 2**: 线程安全。Struts 2中的Action为每个HTTP请求创建一个新实例,因此每个请求之间不会...

    Spring MVC面试宝典1.pdf

    如果必须使用成员变量,则应该标记为`final`或使用线程安全的数据结构。 - **依赖注入**:利用Spring的依赖注入机制,将状态管理委托给线程安全的Bean。 - **使用ThreadLocal**:对于需要在不同请求间保持状态的场景...

    Java框架面试题总结

    - **singleton**:单例模式,容器中只有一个Bean实例。 - **prototype**:原型模式,每次请求都会创建一个新的Bean实例。 - **request**:每个HTTP请求都有一个Bean实例。 - **session**:每个HTTP Session都有一个...

    java私塾全部笔记

    - 如何定义和使用Result来处理Action的结果。 - **Intercepter框架** - Interceptor的工作原理及其在WebWork中的应用。 - **OGNL表达式语言** - OGNL(Object-Graph Navigation Language)的使用方法。 - **验证...

    紫光华宇软件工程师笔试题

    2. **Struts实现MVC**:Struts是一个基于MVC设计模式的Java Web框架,通过Action和Form Bean实现模型,JSP作为视图,控制器则由Struts控制器组件处理。 3. **字符串对象相等判断**:Java中,使用`equals()`方法判断...

    文思创新试题. 杭州公司

    - `action`:映射请求URL到具体的Action实例。 - `form-bean`:定义表单验证和数据封装的规则。 ### 17. 解释Request中的三个方法及其作用 - `getSession()`:获取当前请求的Session对象,用于保存用户状态信息。 ...

Global site tag (gtag.js) - Google Analytics