我有一个如下所示的类,方法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
变量的相同对象?
是否有可能通过第二次请求覆盖变量?
答案 0 :(得分:1)
如果你的bean被实例化为每个请求然后没有,你没事。如果Spring为每个请求注入一个重用的那个,那么你就遇到了问题。您可以通过不将errorLists存储为实例变量来轻松解决此问题。将您的代码更改为:
public class ClassLevelVariableTest
{
public void doSomethingForMe()
{
List<String> errorLists = new ArrayList<>();
您似乎并未将错误列表用作实例变量,因此您应该没问题。