[英]Spring Controller singleton Object
我對控制器對象有些困惑。 據我所知,默認情況下控制器為單例。 Singleton如何用於Web應用程序,如下面的代碼所示,如果線程1執行到第9行並且empId為12,線程2從線程1獲得控制,而empId為23並完成整個方法的執行,然后再次執行線程1執行empId的值是12還是23。
而且我還注意到,僅為UserServiceDao類創建了一個對象,因此如何在spring mvc中管理線程,每個線程都有自己的實例。
1 public class ActionController {
2
3 @Autowired
4 UserServiceDao userServiceDao;
5
int count = 1;
6
7 @RequestMapping("/dashboard.htm")
8 public ModelAndView dashboard(HttpServletRequest request) {
9 String empId = request.getParameter("empId");
10 UserProfile userProfile = userServiceDao.loadEmpById(empId);
System.out.println(count);
count++;
11 }
12 }
Thread first output: 1;
Thread second output : 2;
謝謝。
在控制器中,您沒有任何實例變量來保持任何控制器方法的調用狀態。 所有變量都是永不在線程之間共享的方法(局部)變量,因此以多線程方式使用它是沒有問題的。
與使用servlet相同。
方法(局部)變量駐留在堆棧上,並且作用域僅限於方法的末尾。 此處的empId
是局部變量,不在多個線程之間共享。
同樣, UserServiceDao
不應包含任何實例變量以保持其方法調用的狀態。
看下面的圖片:
控制器及其所有依賴項通常都是無狀態的,因此並發訪問無需擔心。 尤其要使您的DAO保持無狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.