在 class 中使用 class 级别变量来处理多个请求
using class level variable in class which handle multiple request
我有一个 class 如下所示,其中的方法 doSomethingForMe()
从 servlet 调用。 servlet 可以对同一方法发出多个请求。
Servlet 从 Spring 获取对象。因为这个 class 正在被 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 用作实例变量,因此应该没问题。
我有一个 class 如下所示,其中的方法 doSomethingForMe()
从 servlet 调用。 servlet 可以对同一方法发出多个请求。
Servlet 从 Spring 获取对象。因为这个 class 正在被 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 用作实例变量,因此应该没问题。