我有一个如下编写的类,其方法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/