什么是定义变量和类的不同方法使用的最有效方法?

时间:2013-11-27 09:30:56

标签: java model-view-controller struts2 dynamic-memory-allocation model-driven

我对有效内存使用的问题很少。我有一个表单,将提交以接收结果项目列表。提交表单后,其字段将由请求变量接收,并将由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";
  }
  .......
}

2 个答案:

答案 0 :(得分:0)

  

我应该在哪里分配内存来请求变量(请求请求=新请求)?在构造函数?或者根本不分配它,因为它现在有效吗?

实际上这应该不是问题,因为Java关心所有的内存。在声明变量时可以初始化变量。在这种情况下,无法获得NullPointerException,因为变量应该已经初始化。

当然,当您这样做时,您会在创建对象时初始化所有变量。但同样,这不应该是性能问题。

  

我应该在哪里创建Model类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个单独的对象?

关于模型实例,它取决于。如果要在多个方法上共享一个对象,最好创建一个私有类变量。

否则,如果您只想在其中一个方法中使用模型实例,那么您应该只在该方法中创建变量。

答案 1 :(得分:0)

  

我应该在哪里分配内存来请求变量(请求请求=新请求)?在构造函数?或者根本不分配它,因为它现在有效吗?

您可以在代码中的任何位置,构造函数,内联,惰性,通过容器,使用其他DI框架,使用Struts类型转换,拦截器等执行此操作。您应遵循的是Java Bean约定。

  

我应该在哪里创建Model类的对象,因为它被不同的方法使用。我应该在每个方法中定义它还是最好有一个单独的对象?

第二个问题涉及动作类对象的线程安全性。在Struts的前一个主要版本中,用户bean作为参数传递给操作方法是线程安全的,因为操作类不是。

在当前版本的Struts中,操作类是线程安全的,因为每个操作调用都会创建操作类的新实例。您可以为动作类中的Model创建一个可由不同方法使用的属性。在这种情况下,您可以定义正在使用的对象的范围。

相关问题