Spring 、SpringMVC 、Struts2之間的區別


一、Spring與SpringMVC的區別:  

spring是一個開源框架,是為了解決企業應用程序開發,功能如下:  

功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能  

范圍:任何Java應用   Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

   1、輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。並且Spring所需的處理開銷也是微不足道的。此外, Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。  

  2、控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器     中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。   

3、面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——     僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持。   

4、容器——Spring包含並管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基於一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例     ——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的, 難以使用。   

5、框架——Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在     一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。所有Spring的這些特征使你能夠編寫更干凈、更可管理、並且更易於測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。Spring的兩大核心AOP與IOC,可以單獨用於任何應用,包括與Struts等MVC框架與Hibernate等ORM框架的集成,目前很多公司所謂的輕量級開發就是用Spring + Struts(2)+Hibernate。    

Spring MVC就是一個MVC框架,個人覺得Spring MVC annotation式的開發比Struts2方便,可以直接代替上面的Struts(當然Struts的做為一個非常成熟的MVC,功能上感覺還是比Spring強一點,不過Spring MVC已經足夠用了)。當然spring mvc的執行效率比struts高,是因為struts的值棧影響效率。    

spring mvc類似於struts的一個MVC開框架,其實都是屬於spring,spring mvc需要有spring的架包作為支撐才能跑起來。

   二、Spring與Struts2的區別:     

Struts2就是一個攔截器棧 也就是一系列的攔截器。處理用戶的請求,OGNL的使用,表單驗證 等都是默認的攔截器在起作用。     

spring的攔截器,主要體現在AOP的事務管理方面,還有比如一些錯誤或者異常的日志的顯示也是通過配置spring的log攔截器來實現的。  

三、StringMVC與Struts2的區別:     

   1、Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,   一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上SpringMVC就容易實現   restful url,而struts2的架構實現起來要費勁,因為Struts2中Action的一個方法可以對應一個url,   而其類屬性卻被所有方法共享,這也就無法用注解或其他方式標識其所屬方法了。

    2、SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,  處理結果通過ModelMap交回給框架,方法之間不共享變量,而Struts2搞的就比較亂,雖然方法之間也是獨立的,  但其所有Action變量是共享的,這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩,  每次來了請求就創建一個Action,一個Action對象對應一個request上下文。

    3、Struts2需要針對每個request進行封裝,把request,session等servlet生命周期的變量封裝成一個一個Map,  供給每個Action使用,並保證線程安全,所以在原則上,是比較耗費內存的。

    4、攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式,  這樣導致Struts2的配置文件量還是比SpringMVC大。

    5、SpringMVC的入口是servlet,而Struts2是filter(這里要指出,filter和servlet是不同的。  以前認為filter是servlet的一種特殊),這就導致了二者的機制不同,這里就牽涉到servlet和filter的區別了。

    6、SpringMVC集成了Ajax,使用非常方便,只需一個注解@ResponseBody就可以實現,然后直接返回響應文本即可,  而Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己寫代碼集成進去,  使用起來也相對不方便。

    7、SpringMVC驗證支持JSR303,處理起來相對更加靈活方便,而Struts2驗證比較繁瑣,感覺太煩亂。

    8、SpringMVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高(  當然Struts2也可以通過不同的目錄結構和相關配置做到SpringMVC一樣的效果,但是需要xml配置的地方不少)。

    9、設計思想上,Struts2更加符合OOP的編程思想, SpringMVC就比較謹慎,在servlet上擴展。

    10、SpringMVC開發效率和性能高於Struts2。

    11、SpringMVC可以認為已經100%零配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM