導讀:近期做到的項目中,用到的框架師SSM(SpringMVC+Spring+Mybatis),那么在這之前用過SSH,這里主要是區分一下SpringMVC和Struts,但是由於SpringMVC和Spring真的也挺容易迷糊的,所以,本篇博客,就是區分一下這三者之間的關系,明確其具體所指,為接下來的框架搭建和應用做准備!
說明:純屬個人觀點
一、Spring
首先,結合到自己對於Spring的使用,我明確的一點是,Spring嚴格上來說,並不是一種框架。它相當於一個粘合劑,黏合了別的框架或者組件。所以,spring是一個容器!為什么用Spring,個人感覺,spring就是一個容器的本質,程序開發的模塊組件,都可以通過spring這個容器進行組裝拼合,spring為我們提供了很多 管理的功能。而且,它是一個輕量級的容器。我們常說EJB是重量級,Spring是輕量級的,那么,究竟什么叫輕量級或重量級呢?
附:輕量級和重量級(往簡單了說)
首先;輕量級和重量級,它只是一個相對的概念。如果沒有對比,就沒有所謂的輕重之分
輕量級:當輕量級的框架啟動時,創建和銷毀的資源都非常少。簡而言之,一個輕量級的框架,它的入侵性非常小,也可以說是耦合性很低。可以很輕易的替換掉它,而不需要做太大的改動,它對別的組件的依賴非常小!
重量級:和輕量級相對,引入一個重量級的框架,意味着需要引入相當多的依賴和其他組件,當需要修改這個框架時,基本上面臨着重組的危機!
二、SpringMVC
從Spring的結構圖可以看出,springMVC位於spring web端的一個框架,是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦。附:基於請求驅動指的就是使用請求-響應模型。從原理上看,它基本上和.NET的MVC的原理相同!
三、Spring和SpringMVC的聯系
從名字上就可以窺探出,Spring>SpringMVC,那么事實上,spring和SpringMVC是一種父子關系。SpringMVC是spring擴展出的一個應用於web端的框架。在這里需要注意的一點,就是到底什么是父子容器關系:
spring主要的作用是黏合其他模塊組件,進行統一管理,springmvc則主要是負責web端。那么,我們都知道,我們在應用spring的時候,可以使用注入。這個時候,如果我們的web端是用的SpringMVC,這個時候,controller理論上是通過SpringMVC去注入,但是,使用spring注入,同樣是可行的。同理,service等層,使用SpringMVC配置的統一掃描裝配也是可以的。所以,如果說只是為了使用spring的依賴注入,是大可不必將springMVC和spring同時使用的。他們完全可以分開!
但是,盡管SpringMVC和spring都可以進行自動裝配掃描,值得注意的是:
spring(父容器)並不能直接訪問SpringMVC(子容器)所注入的對象,但是SpringMVC卻可以訪問到spring裝載的對象。所以,在配置自動裝配的時候,應該注意到這一點。
四、Struts
Struts是對於MVC的一種非常完美的實現,從根本上來說,它其實和SpringMVC一樣,都是基於MVC思想的擴展實現。但是,在SpringMVC3之后 ,SpringMVC完超Struts。(注:但是,框架並沒有優劣之分,框架本身就是一種權衡,相對而言而已)
Struts和SpringMVC的區別:
首先,如果說項目中使用了spring,那么還是使用SpringMVC吧,因為相對於融合Struts來說,spring和SpringMVC是非常完美的無縫鏈接。
其次,SpringMVC的攔截粒度是方法,而Struts的粒度是類
然后,入口不同,SpringMVC的入口是servlet,而Struts是filter
最后,如果使用注解的話,SpringMVC基本上是零配置,而Struts需要配置很多。
備注:想說一點的是:在Struts中可以配置開發者模式,就是說當修改了一個URL訪問,可以不用重啟工程。但是SpringMVC需要重啟。
五、總結
我也不知道怎么從專業的角度去區分這幾個的區別,但是,就從我自己的使用上來說,我當時接觸SpringMVC的時候,入門真心是沒有花太多的時間,而Struts真的讓我弄了好些個日子,包括那些標簽配置,還有配置文件等等。所以說實在的,我現在從心理上,對於這個SpringMVC和Struts,我已經倒向了SpringMVC了!但是,還是那句話,框架本身就是為了找到一個平衡,用哪個合適,就用哪個吧。都有各自的好!