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

标签 java multithreading servlets

我有一个如下编写的类,其方法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 为每个请求注入(inject)一个重用的单个注入(inject),那么就会遇到问题。您可以通过不将 errorLists 存储为实例变量来轻松解决此问题。将您的代码更改为:

public class ClassLevelVariableTest
{

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

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

关于java - 在处理多个请求的类中使用类级别变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29232151/

相关文章:

java - 找不到用于重命名的 Eclipse 快捷方式

java - 将 Eclipse 动态 web 项目转换为带有模块的 maven 项目

java - 检查 MySQL 中的重复插入

java - javac 是否优化 "foo".length()?

java - 在 Spring Data MongodB 存储库中查询集合内的字符串

java - 使用 Java 将 double 值转换为 BigInteger 值的最佳方法

c - 锁定 OMP 区域

java - Scala 中线程执行器池的替代品

c# - MVC 应用程序中的作业调度

servlets - 如何从 servlet 过滤器中的 URL 中提取用户名和密码?