2

我知道动作类上的实例变量是线程安全的,因为动作类是根据请求实例化的。但是我有这种扩展动作类的需求,我担心线程安全。

比如说,我有一些共同的属性和一些在几个动作类中处理这些属性的方法。我更喜欢将它们放在一个单独的动作类中,并使其扩展ActionSupport. 然后所有动作类都将扩展我刚刚创建的基本动作类。我的问题是,基本动作类上的实例变量是线程安全的吗?S2 是否管理基本操作类?

还有什么使动作类成为由 S2 管理并根据请求实例化的动作类?在struts.xml? 延长ActionSupport课?

4

2 回答 2

3

我认为您对 Java 的工作方式有些困惑。如果你有一个类A和一个类B extends A,当你实例化B有一个B. 这不像是A支持所有实例的单个实例B。没有“基类管理”。

通过 XML、注释或约定声明为动作的类由 Struts 动作实例化机制实例化。扩展ActionSupport(几乎)与它无关,唯一可能与它有关的是因为ActionSupport实现了Action接口。

于 2013-05-16T12:48:31.253 回答
2

还有什么使动作类成为由 S2 管理并根据请求实例化的动作类?在 struts.xml 中声明?扩展 ActionSupport 类?

在中声明struts.xml:是的,这就是将 Java 类转换为 Action。

每个 Action 类都是线程安全的,因为它是 ThreadLocal,无论它扩展或实现什么。每个用户的每个请求都将拥有自己的每个 Action 类的副本。

PS:其他类(未在 中声明struts.xml)不是“(动作类)不由 S2 管理并根据请求实例化”,它们根本不是动作。

于 2013-05-16T13:51:40.983 回答