當前位置:
首頁 > 知識 > spring的優缺點

spring的優缺點

大部分項目都少不了spring的身影,為什麼大家對他如此青睞,而且對他的追捧絲毫沒有減退之勢呢

我們看一個框架是否優秀,首先看這個框架是否是非侵入式的,其次是可擴展性,再次是解耦性和開發周期。

Spring是什麼?

Spring是一個輕量級的DI和AOP容器框架。

說它輕量級有一大部分原因是相對與EJB的(雖然本人從沒有接觸過EJB的應用),重要的是,Spring是非侵入式的(所謂非侵入式就是遠程調試 而不植入,spring不再用new的方式來創建對象,而是使用依賴注入的方式),基於spring開發的應用一般不依賴於spring的類。

DI:稱作依賴注入(Dependency Injection),和控制反轉一個概念,具體的講,當一個角色需要另外一個角色協助的時候,在傳統的程序設計中,通常有調用者來創建被調用者的實例。但是在spring中創建被調用者將不再有調用者完成,因此叫控制反轉。創建被調用對象有Spring來完成,在容器實例化對象的時候主動的將被調用者(或者說它的依賴對象)注入給調用對象,因此又叫依賴注入。

AOP:Spring對面向切面編程提供了強有力的支持,通過它讓我們將業務邏輯從應用服務(如事務管理)中分離出來,實現了高內聚開發(所謂高內聚是指一個軟體模塊是由相關性很強的代碼組成,只負責一項任務,也就是常說的單一責任原則。),應用對象只關注業務邏輯,不再負責其它系統問題(如日誌、事務等)。Spring支持用戶自定義切面。

面向切面編程是面向對象編程的有力補充。面向對象編程將程序分成各個層次的對象,面向切面的程序將運行過程分解成各個切面。AOP是從運行程序的角度去考慮程序的結構,提取業務處理過程的切面,OOP是靜態的抽象,AOP是動態的抽象,是對應用執行過程的步驟進行抽象,從而獲得步驟之間的邏輯劃分。

容器:Spring是個容器,因為它包含並且管理應用對象的生命周期和配置。如對象的創建、銷毀、回調等。

框架:Spring作為一個框架,提供了一些基礎功能,(如事務管理,持久層集成等),使開發人員更專註於開發應用邏輯。

看完了Spring是什麼,再來看看Spring有哪些優點

1.使用Spring的IOC容器,將對象之間的依賴關係交給Spring,降低組件之間的耦合性,讓我們更專註於應用邏輯

2.可以提供眾多服務,事務管理,WS等。

3.AOP的很好支持,速食麵向切面編程。

4.對主流的框架提供了很好的集成支持,如hibernate,Struts2,JPA等

5.Spring DI機制降低了業務對象替換的複雜性。

6.Spring屬於低侵入,代碼污染極低。

7.Spring的高度可開放性,並不強制依賴於Spring,開發者可以自由選擇Spring部分或全部

再來看看Spring有哪些缺點

1.jsp中要寫很多代碼、控制器過於靈活,缺少一個公用控制器

2.Spring不支持分散式,這也是EJB仍然在用的原因之一。

首先Spring 是一個框架,使用Spring並不代表代碼質量的提高,就像蓋房子選擇用上海的地皮還是北京的地皮一樣,房子質量與土地所在的城市無關,與房子的具體設計方案和選料有關。

使用Spring 等框架可以簡化很多基礎性的工作,配置好後可以方便構建業務應用。

框架使用多了會有局限的感覺,像小鳥被套在籠子里,無法飛出去,雖然在籠子裡面吃喝不愁。目前編程的門檻越來越低,諸多開源框架廣泛傳播,幾乎沒有什麼技術門檻,會配置就會編程,而一個好的DBA對軟體性能會有很大提高,軟體的核心邏輯最終會轉移到對資料庫的操作上,而且對目前從事的工作來講,感覺技術的瓶頸越來越多的局限在對資料庫的操作上,下一步要認真提高下了。

Spring的優勢不言而喻:

1. 提供了一種管理對象的方法,可以把中間層對象有效地組織起來。一個完美的框架「黏合劑」。

2. 採用了分層結構,可以增量引入到項目中。

3. 有利於面向介面編程習慣的養成。

4. 目的之一是為了寫出易於測試的代碼。

5. 非侵入性,應用程序對Spring API的依賴可以減至最小限度。

6. 一致的數據訪問介面。

6. 一個輕量級的架構解決方案。

對Spring的理解

Spring致力於使用POJOs來構建應用程序。由框架提供應用程序的基礎設施,將只含有業務邏輯的POJOs作為組件來管理。從而在應用程序中形成兩條相對獨立發展的平行線,並且在各自的抽象層面上延長了各自的生命周期。

Spring的工作基礎是Ioc。Ioc將創建對象的職責從應用程序代碼剝離到了框架中,通常2中注入方式:setter 和 ctor參數。

每個Bean定義被當作一個POJO(通過類名和JavaBean的初始屬性或構造方法參數兩種方式定義的Bean)。

Spring的核心在org.springframework.beans,更高抽象層面是BeanFactory. BeanFactory是一個非常輕量級的容器。

關於可維護性的思考

Spring之類的技術確實帶來了應用系統的可維護性的提高嗎?

Ioc, AOP之類的技術,本質上都是將原本位於應用程序代碼中"硬編碼"邏輯,剝離出來放到了配置文件中(或者其他形式)。主流聲音都是認為提高了應用程序的可維護性。

但如果從以下方面觀察,結合項目實際經驗,個人感覺這些技術的應用大大降低了應用程序的可維護性,尤其是面對一個陌生的系統,或者項目人員變動頻繁的時候。

1. 中斷了應用程序的邏輯,使代碼變得不完整,不直觀。此時單從Source無法完全把握應用的所有行為。

2. 將原本應該代碼化的邏輯配置化,增加了出錯的機會以及額外的負擔。

3. 時光倒退,失去了IDE的支持。在目前IDE功能日益強大的時代,以往代碼重構等讓人頭痛的舉動越來越容易。而且IDE還提供了諸多強大的輔助功能,使得編程的門檻降低很多。通常來說,維護代碼要比維護配置文件,或者配置文件+代碼的混合體要容易的多。

4. 調試階段不直觀,後期的bug對應階段,不容易判斷問題所在。

首先Spring 是一個框架,使用Spring並不代表代碼質量的提高,就像蓋房子選擇用上海的地皮還是北京的地皮一樣,房子質量與土地所在的城市無關,與房子的具體設計方案和選料有關。

使用Spring 等框架可以簡化很多基礎性的工作,配置好後可以方便構建業務應用。

框架使用多了會有局限的感覺,像小鳥被套在籠子里,無法飛出去,雖然在籠子裡面吃喝不愁。目前編程的門檻越來越低,諸多開源框架廣泛傳播,幾乎沒有什麼技術門檻,會配置就會編程,而一個好的DBA對軟體性能會有很大提高,軟體的核心邏輯最終會轉移到對資料庫的操作上,而且對目前從事的工作來講,感覺技術的瓶頸越來越多的局限在對資料庫的操作上,下一步要認真提高下了。

Spring的優勢不言而喻:

1. 提供了一種管理對象的方法,可以把中間層對象有效地組織起來。一個完美的框架「黏合劑」。

2. 採用了分層結構,可以增量引入到項目中。

3. 有利於面向介面編程習慣的養成。

4. 目的之一是為了寫出易於測試的代碼。

5. 非侵入性,應用程序對Spring API的依賴可以減至最小限度。

6. 一致的數據訪問介面。

6. 一個輕量級的架構解決方案。

對Spring的理解

Spring致力於使用POJOs來構建應用程序。由框架提供應用程序的基礎設施,將只含有業務邏輯的POJOs作為組件來管理。從而在應用程序中形成兩條相對獨立發展的平行線,並且在各自的抽象層面上延長了各自的生命周期。

Spring的工作基礎是Ioc。Ioc將創建對象的職責從應用程序代碼剝離到了框架中,通常2中注入方式:setter 和 ctor參數。

每個Bean定義被當作一個POJO(通過類名和JavaBean的初始屬性或構造方法參數兩種方式定義的Bean)。

Spring的核心在org.springframework.beans,更高抽象層面是BeanFactory. BeanFactory是一個非常輕量級的容器。

關於可維護性的思考

Spring之類的技術確實帶來了應用系統的可維護性的提高嗎?

Ioc, AOP之類的技術,本質上都是將原本位於應用程序代碼中"硬編碼"邏輯,剝離出來放到了配置文件中(或者其他形式)。主流聲音都是認為提高了應用程序的可維護性。

但如果從以下方面觀察,結合項目實際經驗,個人感覺這些技術的應用大大降低了應用程序的可維護性,尤其是面對一個陌生的系統,或者項目人員變動頻繁的時候。

1. 中斷了應用程序的邏輯,使代碼變得不完整,不直觀。此時單從Source無法完全把握應用的所有行為。

2. 將原本應該代碼化的邏輯配置化,增加了出錯的機會以及額外的負擔。

3. 時光倒退,失去了IDE的支持。在目前IDE功能日益強大的時代,以往代碼重構等讓人頭痛的舉動越來越容易。而且IDE還提供了諸多強大的輔助功能,使得編程的門檻降低很多。通常來說,維護代碼要比維護配置文件,或者配置文件+代碼的混合體要容易的多。

4. 調試階段不直觀,後期的bug對應階段,不容易判斷問題所在。

spring的優缺點

打開今日頭條,查看更多精彩圖片

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Android中MetaData.cpp數據存儲學習
rapid-generator自動生成代碼步驟

TAG:程序員小新人學習 |