Struts 1是为每个会话创建一个控制器对象还是控制器类单例?

时间:2013-05-12 16:01:32

标签: java spring-mvc struts

我有一个Struts 1 / Spring 2应用程序。我想知道我的Action课程是单身人士所有会话共享,或者每个用户/会话是否获得了一个新对象Action上课?

1 个答案:

答案 0 :(得分:2)

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

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

  1. 实例和静态变量不得用于存储与特定请求状态相关的信息。它们可用于跨同一行动的请求共享全局资源。
  2. 如果这些资源需要保护,则必须同步对其他资源(JavaBeans,会话变量等)的访问。 (但一般情况下,资源类应设计为在必要时提供自己的保护。

  3. 编辑:

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

    Struts 1动作是单例并且必须是线程安全的,因为只有一个类的实例来处理该Action的所有请求。单例策略限制了Struts 1 Actions可以完成的任务,并且需要额外注意开发。操作资源必须是线程安全的或同步的。