Java 在处理多个请求的类中使用类级别变量

Java 在处理多个请求的类中使用类级别变量,java,multithreading,servlets,Java,Multithreading,Servlets,我有一个如下所述的类,方法doSomethingForMe(),其中的一个从servlet调用。servlet可以对同一方法发出多个请求。 Servlet从Spring获取对象。因为这个类是由SpringbeanFactory初始化的 public class ClassLevelVariableTest { private List<String> errorLists; public void doSomethingForMe() { errorLis

我有一个如下所述的类,方法
doSomethingForMe()
,其中的一个从servlet调用。servlet可以对同一方法发出多个请求。 Servlet从Spring获取对象。因为这个类是由SpringbeanFactory初始化的

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);
    }
  }
}
公共类ClassLevelVariableTest
{
私人名单;
公共无效doSomethingForMe()
{
ErrorList=新的ArrayList();
//再加上其他功能
如果(!ErrorList.isEmpty())
{
编制错误列表(错误列表);
}
}
私有无效制备错误列表(列表错误列表)
{
用于(字符串错误字符串:错误列表)
{
System.out.println(错误字符串);
}
}
}
因此,我的第一个问题是:是否有可能在后续请求中获得相同的
errorlist
变量对象


是否有可能使变量被第二个请求覆盖?

如果为每个请求实例化bean,则没有问题。如果Spring为每个请求注入一个重复使用的函数,那么您就有问题了。您可以通过不将ErrorList存储为实例变量来轻松解决此问题。将代码更改为:

public class ClassLevelVariableTest
{

    public void doSomethingForMe()
    {
         List<String> errorLists = new ArrayList<>();
公共类ClassLevelVariableTest
{
公共无效doSomethingForMe()
{
List errorLists=新建ArrayList();

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

没有,因为您每次调用该方法时都在创建ArrayList的
新对象!!您必须在servlet中创建该类的新对象,对吗?如果有新对象,它将如何影响
errorList
变量object everytime?我也在使用spring。因此类ClassLevelVariableTest是一个spring bean。因此不会有新的运算符。**如果spring为每个请求注入一个重复使用的运算符,那么您就有问题了。**我们如何确认这一点?我不再使用spring,所以不确定最佳方式,但您可以在c中放入一个print语句在构造函数上,查看它是否比我自己发现的更容易构造。bean的范围可以在应用程序上下文中定义。默认范围是Singleton。因此,在我的例子中,它将为每个应用程序创建一个对象。