используя переменную уровня класса в классе, который обрабатывает несколько запросов

1

У меня есть класс, написанный следующим образом, метод doSomethingForMe() которого doSomethingForMe() из сервлета. Сервлет может выдавать несколько запросов для одного и того же метода. Сервлет получает объект из 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 в последующих запросах?

Есть ли вероятность получить переменную, переопределенную вторым запросом?

  • 0
    Нет, шансов нет, так как вы создаете new Object of ArrayList каждый раз, когда вызывается метод !!
  • 0
    Вы должны создавать новый объект этого класса в сервлете, верно? Как это повлияет на переменную errorList если каждый раз появляется новый объект?
Показать ещё 1 комментарий
Теги:
servlets
multithreading

1 ответ

1
Лучший ответ

Если ваш компонент создается для каждого запроса, тогда нет, вы в порядке. Если Spring вводит один, повторно используемый для каждого запроса, тогда у вас есть проблема. Вы можете легко исправить это, не сохраняя errorLists в качестве переменной экземпляра. Измените свой код на это:

public class ClassLevelVariableTest
{

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

Кажется, вы не используете errorLists как переменную экземпляра, поэтому все должно быть хорошо.

  • 0
    ** Если Spring вводит один повторно используемый для каждого запроса, у вас есть проблема. **. Как мы можем это подтвердить?
  • 0
    Я больше не использую Spring, поэтому не уверен в лучшем способе, но вы можете просто поместить оператор print в конструктор и посмотреть, будет ли он создан несколько раз
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню