在最早的struts2的框架中,由於當時Spring還沒有引入,項目被加載到tomcat裏,這時候前臺有1000個請求,tomcat就會給它1000個線程,由於struts2是多例的,當時後臺接值是裝載在變量裏的,這個時候由於屬性只有一份,容易造成覆蓋。並且由於struts2是多例,所以他在每一次都要1000個對象來處理訪問請求,所以,這前後要創建3000個對象。對於資源也是極大的損耗。
後來是Struts2+Spring+hibernate的SSH框架中,由於spring是單例的,並且通過在方法參數中聲明對象來接收值,所以Action只要一個對象,但是service和dao層依舊是1個對象,所以總共是1002個對象。
在springMVC+spring+mybatis的SSM中。只需要創建3個對象。因爲SpringMVC,spring都是單例的,並且每一層都是通過對象注入實現。
SpringMVC默認是單例的,所以理論上是線程不安全,他是如何解決線程安全問題的。
如圖所示。在堆內存中的方法有m1,m2,m3。當前臺的訪問的到來的時候,他會把這個方法拎出來執行,訪問一次,就拎出來的一次,這樣每一個m1()方法都沒有被重複使用。
並且在SSM框架中,對象直接在方法裏的參數中聲明出來的,需要就聲明一個,第一:前後臺傳值非常方便,第二:非常資源,第三:也避免了線程不安全的因素。
也是Spring的一種重要優勢和特點。