Spring 多線程請求過來調(diào)用的Controller對象都是一個,而不是一個請求過來就創(chuàng)建一個Controller對象。
并發(fā)的安全?
原因就在于Controller對象是單例的,那么如果不小心在類中定義了類變量,那么這個類變量是被所有請求共享的,這可能會造成多個請求修改該變量的值,出現(xiàn)與預(yù)期結(jié)果不符合的異常
那有沒有辦法讓Controller不以單例而以每次請求都重新創(chuàng)建的形式存在呢?
答案是當然可以,只需要在類上添加注解@Scope("prototype")即可,這樣每次請求調(diào)用的類都是重新生成的(每次生成會影響效率)
雖然這樣可以解決問題,但增加了時間成本,總讓人不爽,還有其他方法么?答案是肯定的!
使用ThreadLocal來保存類變量,將類變量保存在線程的變量域中,讓不同的請求隔離開來。
技術(shù)討論 & 疑問建議 & 個人博客
版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 3.0 許可協(xié)議,轉(zhuǎn)載請注明出處!