我理解动作类上的实例变量是线程安全的,因为动作类是按请求实例化的。但我有扩展行动类的需要,而且我关心线程安全。
比方说,例如,我有一些共同的属性和一些处理这些属性的方法在几个动作类中。我更喜欢将它们放在一个动作类中,并使其扩展ActionSupport
。然后,所有操作类将扩展我刚刚创建的基本操作类。我的问题是,基本动作类的实例变量是否是线程安全的? S2管理基本动作类吗?
是什么使动作类成为一个动作类,由S2管理并按请求实例化?在struts.xml
中宣布?扩展ActionSupport
类?
答案 0 :(得分:3)
我认为你对Java如何工作有点困惑。
如果您有一个班级A
和一个班级B extends A
,那么当您实例化B
时,会有一个B
。这不像是A
支持B
的所有实例的单个实例。没有“基类管理”。
通过XML,注释或约定声明为动作的类由Struts动作实例化机制实例化。扩展ActionSupport
(几乎)与它无关,可能与它有关的唯一一次是因为ActionSupport
实现了Action
接口。
答案 1 :(得分:2)
是什么使动作类成为一个动作类,由S2管理并按请求实例化? 在struts.xml中声明?扩展ActionSupport类?
在struts.xml
中声明:是的,是将Java类转换为Action。
每个Action类都是线程安全的,因为它是ThreadLocal,无论它扩展还是实现。每个用户的每个请求都有自己的每个Action类的副本。
PS:其他类(未在struts.xml
中声明)不是“(动作类),不是由S2管理并按照请求实例化”,它们只是非动作。< / p>