一个 Action class 可以限定在 Singleton 范围内吗?

Can an Action class be scoped to Singleton?

我的问题不仅是操作 类 是否可以限定为单例,而且我还想知道哪些是最佳做法。在 Struts2 和 Spring 的上下文中。控制器和模型的最佳视图范围(比如请求或会话)。

  1. Struts2 操作由 Struts 容器管理。它们是 ThreadLocal,因此每个请求都有其自己的 Action 线程安全副本。

  2. 如果使用Spring通过Struts2-Spring-plugin来处理它们,有多个层次的用法:

    • 你可以让 Struts 容器实例化它们,并通过 Spring 来处理它们以进行依赖注入,或者
    • 您可以让 Spring 接管控制权,并全面负责每个 Action 的整个生命周期。
      在第二种情况下:
      • 如果您在 Spring XML 配置文件中将一个动作声明为 bean,该动作将获得默认的 Spring 作用域,即 Singleton (scope="singleton" ).这是危险的、无用的,而且 99.99% 的时间都不是你想要的,因为你将失去框架功能的基本部分,操作将变成某种 servlet,线程不安全,并且会出现许多问题;
      • 为防止这种情况发生,您可以将 scope="prototype" 放在 bean 声明中,这将使 Spring 在不影响其性质的情况下实例化操作。
  3. 如果您在容器内 Java EE 6+ 兼容(例如,Jboss 7、Wildfly 8、TomEE 1.7、Glassfish 3+、ecc... ),上下文和依赖注入是通过 CDI 处理的。如果需要,可以使用 Struts2-CDI-plugin to allow CDI to handle your actions and inject dependencies through the @Inject 注释(而不是 @Autowired 注释)

我以前用过很多Spring,然后在发现CDI和CDI插件后,我就换了,再也没有回头,所以我投了n.3