定义由类的不同方法使用的变量和类的最有效方法是啥?
Posted
技术标签:
【中文标题】定义由类的不同方法使用的变量和类的最有效方法是啥?【英文标题】:Whats the most efficient way to define a variable and a class that are used by different methods of a class?定义由类的不同方法使用的变量和类的最有效方法是什么? 【发布时间】:2013-12-12 20:42:06 【问题描述】:关于高效内存使用,我有几个问题。我有一个表格,将提交以接收项目列表作为结果。一旦提交表单,其字段将由请求变量接收,并由模型类的submitRequest
方法处理。
问题是我应该在哪里为请求变量 (Request request = new Request
) 分配内存?在构造函数中?或者根本不分配它,因为它现在可以工作?
第二个问题是我应该在哪里创建Model
类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个对象?
public class MyClass
private Request request;
private List<result> results;
//private formModel myModel = new formModel();
public MyClass()
public String myForm()
formModel myModel = new formModel();
this.results = myModel.submitRequest(request); //process request and return results
return "SUCCESS";
.......
【问题讨论】:
【参考方案1】:我应该在哪里为请求变量分配内存(请求请求 = 新请求)?在构造函数中?还是像现在这样完全不分配?
您可以在代码中的任何位置执行此操作,在构造函数中、内联、惰性、通过容器、使用其他 DI 框架、使用 Struts 类型转换、拦截器等。您应该遵循 Java Bean 约定。
我应该在哪里创建 Model 类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个对象?
第二个问题是针对动作类对象的线程安全性。在以前的 Struts 主要版本中,用户 bean 作为参数传递给操作方法以实现线程安全,因为操作类不是。
在当前版本的 Struts 中,动作类是线程安全的,因为动作类的新实例是在每次动作调用时创建的。您可以在操作类中为Model
创建一个属性,该属性可以由不同的方法使用。在这种情况下,您可以定义正在使用的对象的范围。
【讨论】:
谢谢,我不明白你所说的“除非它们不是不同的动作”是什么意思,你所说的“应该定义正在使用的对象的范围”是什么意思 formModel 是一个有方法的类访问数据库,因为大多数方法都将使用此需求,我应该将其设置为“私有 formModel myModel = new formModel();”吗?或者在每个类中定义它? , results 是 JSP 用来显示结果的,我把它作为一个字段供 JSP 访问。对不起,我的英语很弱。 在简单的情况下是的,初始化内联。范围将default
作为操作范围。有关 struts 容器中可用范围的更多信息,请参阅 bean 配置。 this 的问题可能会对您有所帮助。【参考方案2】:
我应该在哪里为请求变量分配内存(请求请求 = 新请求)?在构造函数中?或者根本不分配它,因为它现在可以工作?
实际上这应该不是问题,因为 Java 关心所有的内存。声明变量时可以对其进行初始化。在这种情况下,不可能得到NullPointerException
,因为变量应该已经初始化了。
当然,当您这样做时,您会在创建对象时初始化所有变量。但同样,这不应该是性能问题。
我应该在哪里创建 Model 类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个对象?
关于模型实例,这取决于。如果您想通过多个方法共享一个对象,最好创建一个私有类变量。
否则,如果您只想在其中一种方法中使用模型实例,那么您应该只在该方法中创建变量。
【讨论】:
以上是关于定义由类的不同方法使用的变量和类的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章