我有一个如下编写的类,其中的方法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为每个请求注入一个可重用的对象,那么您将遇到问题。您可以通过不将errorLists存储为实例变量来轻松解决此问题。将您的代码更改为此:
public class ClassLevelVariableTest
{
public void doSomethingForMe()
{
List<String> errorLists = new ArrayList<>();
似乎您没有将errorLists用作实例变量,所以应该没问题。