使用Ajax请求从.jsp页面访问ResourceMapping“过滤器”。这段代码是否在Spring应用程序中是安全的?
我的理解是,Spring将创建一个新的执行线程,每次访问资源“过滤器”时都会执行 。由于FilterItems是一个Spring @Component bean ,因此它是一个singleton,然后多个线程(通过调用资源“filter”来访问)将访问同一个实例。 FilterItems的一个新实例被实例化,每次调用“filter” 资源,因为每个实例在线程间共享,那么这是线程安全的?
是FilterItems.filter1 &的调用FilterItems.filter2 线程?
@Controller
@RequestMapping("VIEW")
public class MyController {
@ResourceMapping(value = "filter")
public void filter(){
FilterItems t = new FilterItems();
LinkedList<MyObj> l = new LinkedList<MyObj>();
l.add(new MyObj("1"));
l.add(new MyObj("2"));
System.out.println("size is : " + l.size());
t.filterItem1(l);
System.out.println("size is : " + l.size());
t.filterItem2(l);
System.out.println("size is : " + l.size());
}
}
*****************************************************************************
import java.util.Iterator;
import java.util.LinkedList;
@Component
public class FilterItems {
public void filterItem1(LinkedList<MyObj> l) {
Iterator<MyObj> iter = l.iterator();
while (iter.hasNext()) {
MyObj myObj = iter.next();
if (myObj.param.equalsIgnoreCase("1")) {
iter.remove();
}
}
}
public void filterItem2(LinkedList<MyObj> l) {
Iterator<MyObj> iter = l.iterator();
while (iter.hasNext()) {
MyObj myObj = iter.next();
if (myObj.param.equalsIgnoreCase("2")) {
iter.remove();
}
}
}
private static class MyObj {
public final String param;
public MyObj(String param) {
this.param = param;
}
}
}
谢谢,我改变了公众的可见性,而不是私人的方法调用 – 2015-01-21 11:45:39