1
我的问题不仅在于动作类的范围可以是singleton,而且我也想知道哪些是最佳做法。在Struts2和Spring的上下文中。对于控制器和模型,VIEW的最佳范围(比如请求或会话)。一个Action类可以限定为Singleton吗?
我的问题不仅在于动作类的范围可以是singleton,而且我也想知道哪些是最佳做法。在Struts2和Spring的上下文中。对于控制器和模型,VIEW的最佳范围(比如请求或会话)。一个Action类可以限定为Singleton吗?
Struts2操作由Struts容器管理。它们是ThreadLocal,因此每个请求都有其自己的线程安全副本。
如果你使用Spring通过Struts2-Spring-plugin来处理它们,也有使用的多个层次:
scope="singleton"
)。这是危险的,无用的,99.99%的时间不是你想要的,因为你将失去框架能力的基本部分,行动将变成种类的servlet,线程UNsafe,并且会出现许多问题;scope="prototype"
放入bean声明中,这将让Spring在不影响其性质的情况下实例化该操作。如果你是一个容器的Java EE兼容6+(例如,Jboss的7,8 Wildfly,TomEE 1.7,Glassfish的3+,ECC ...),上下文和依赖内注射通过CDI处理。如果你愿意,你可以使用Struts2-CDI-plugin,让CDI来处理你的行动,并通过@Inject
注释注入依赖(而不是@Autowired
之一)
,再经过发现CDI和CDI插件,我已经切换了,从不回头看,所以我投票支持n.3
请分享你的想法到目前为止?你一直在研究和发现什么?如果有什么疑问,你的结论是什么?......或者你没有,这是你考试的问题? – Mil4n
Spring提供单例的默认范围。然而,当我们在spring中使用struts时,创建动作类singleton是一个好主意,因为如果我们这样做,我将获得bean的相同实例。任何人都可以解释我“Singleton作用域应该与无状态会话Bean和EJB有状态会话bean的原型范围一起使用”动作DAO,DTO,BS和拦截器的类似逻辑。 –
如果对于每个用户请求你是服务器相同的操作类(单例),它必须是无状态的,否则你所有的用户将共享每个其他状态! 如果你正在使用原型范围,Spring将为每个请求提供bean的新实例。 http://docs.spring.io/spring/docs/3.1.0.M2/spring-framework-reference/html/beans.html#beans-factory-scopes-singleton – Mil4n