1. 程式人生 > >spring框架的singleton和prototype在高併發的表現

spring框架的singleton和prototype在高併發的表現

spring的controller、service、dao都是預設singleton的,在singleton的模式下spring只會生成一個物件來處理併發的請求,例如:

@Controller
@RequestMapping("test")
public class Test {
    private int num = 0;

    @RequestMapping("test")
    @ResponseBody
    public int test(Model model){
        return num++;
    }
}

然後使用python模擬請求,結果可以看到多個相同的數字,比如0,1,2,2,3,4,5...

如果在註解上標註@Scope

("prototype"),那麼spring將在每一個請求來後生成一個例項,結果為0,0,0,0,0,0...

有時我在資料中看到spring用ThreadLocal來解決多執行緒併發問題,但明顯沒有用在這些元件上。

明確提到使用了ThreadLocal的元件是事務管理,比如資料庫的事務管理。