我有一个如下编写的类,其中的方法doSomethingForMe()从servlet调用。 Servlet可以针对同一方法发出多个请求。
Servlet从Spring获取对象。由于此类由Spring Bean工厂初始化。

public class ClassLevelVariableTest
{
  private List<String> errorLists;

   public void doSomethingForMe()
   {
     errorLists = new ArrayList<>();
     // plus do the rest functionality
     if (!errorLists.isEmpty())
      {
        prepareErrorList(errorLists);
      }
   }

  private void prepareErrorList(List<String> errorLists)
  {
    for (String errorString : errorLists)
    {
      System.out.println(errorString);
    }
  }
}


因此,我的第一个查询是:是否有机会在后续请求中获得errorLists变量的相同对象?

是否有机会使变量被第二个请求覆盖?

最佳答案

如果针对每个请求都实例化了您的bean,那么否,那很好。如果Spring为每个请求注入一个可重用的对象,那么您将遇到问题。您可以通过不将errorLists存储为实例变量来轻松解决此问题。将您的代码更改为此:

public class ClassLevelVariableTest
{

    public void doSomethingForMe()
    {
         List<String> errorLists = new ArrayList<>();


似乎您没有将errorLists用作实例变量,所以应该没问题。

07-24 19:21