1

我有一个 Struts 1/Spring 2 应用程序。我想知道我的Action类是所有会话共享的单例,还是每个用户/会话都获得了该类的新对象?Action

4

1 回答 1

2

我不确定 Struts Action 类是作为单例实现的,但我可以说框架只使用它的一个实例,并且只有一个实例用于处理所有传入的请求,必须注意不要在不是线程安全的操作类。从javadoc

必须以线程安全的方式对操作进行编程,因为控制器将为多个同时请求共享同一个实例。这意味着您应该在设计时牢记以下几点:

  1. 实例和静态变量不得用于存储与特定请求状态相关的信息。它们可用于在同一操作的请求之间共享全局资源。
  2. 如果这些资源需要保护,则必须同步对其他资源(JavaBeans、会话变量等)的访问。(然而,一般来说,资源类应该被设计成在必要时提供它们自己的保护。

编辑 :

这是官方Apache Struts页面所说的:

Struts 1 Action 是单例的,并且必须是线程安全的,因为只有一个类的实例来处理对该 Action 的所有请求。单例策略限制了 Struts 1 Actions 可以做什么,并且需要格外小心地开发。动作资源必须是线程安全的或同步的。

于 2013-05-12T16:13:25.130 回答