1. 程式人生 > >Service層為什麼要單例

Service層為什麼要單例

        在開發時,共同遵循的原則都是Service和Dao層都是單例的,Dao好理解,因為Dao只是與資料庫的互動。但是為什麼Service也是單例?例如,以下的這段Service的程式碼,如果單例的話,不是存在同步的問題麼?如果多個執行緒同時訪問i變數的話,就會容易造成髒資料以及誤讀以及一下不可預計的錯誤。

       

       經過實踐證明,雖然這個Service是單例的,但是每個執行緒呼叫它這個方法的時候,裡面的i變數都是獨立的。也就是說,每個執行緒都有獨立的i變數,他們之間互相不影響。另外,因為Service層中的非靜態成員變數一般只是Dao類,因此Service使用單例模式也是毫無異議的。

       PS:

       什麼時候使用單例,什麼時候使用多例?當類中存在非靜態變數的時候的,應該通過註解@Scope("prototype"),將其設定為多例模式。相反,視狀況而定。例如,在SSH中,Action層使用多例(Action層為什麼使用多例),在SSM中,Controller層可使用單例或者多例( springmvc控制器controller單例問題)。