Spring框架默認創建的對象的方式是單例,所以業務控制器Controller也是一個單例對象
由此可證明,無論是同一次請求還是同一次會話和不同請求它的對象都是相同的
然而由於對象是單例的,隨之而來的產生了兩個問題:
- 請求數據如果放在成員變量上面,會相互影響。
- 在處理請求比較多的時候,請求使用同一個對象處理,會導致阻塞
SpringMVC提供了request,session兩個生命周期處理上述的問題
request:每次新的請求,創建一個實例
session:每次會話創建一個新的實例,就是同一個瀏覽器,就使用同一個實例
每個請求創建一個實例,類似多例“prototype”
由於每次請求都會產生新的對象,對內存的消耗比較大一般不推薦使用
每次會話(Session),創建一個實例
相同瀏覽器訪問默認為同一個會話(Session)
注意事項:在配置request,session生命周期時,需要在配置文件中加入<mvc:annotation-driven />標簽,因為由於歷史原因,SpringMVC的內核是使用XML編寫的,而注解的支持類似系統不定的方式加入到框架里面,后來出現了很多注解有,而配置文件沒有的功能,這些功能就通過<mvc:annotation-driven />標簽擴展加入。
常用依賴該標簽的功能如下:
- 作用域request、session的支持
- 放開靜態資源的訪問
- 上傳組建的支持
- JSON的支持