使用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