Struts2-扩展动作类和线程安全性

时间:2013-05-16 12:39:30

标签: struts2

我理解动作类上的实例变量是线程安全的,因为动作类是按请求实例化的。但我有扩展行动类的需要,而且我关心线程安全。

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

是什么使动作类成为一个动作类,由S2管理并按请求实例化?在struts.xml中宣布?扩展ActionSupport类?

2 个答案:

答案 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>