1. 程式人生 > >spring技術內幕筆記1

spring技術內幕筆記1

spring

spring的設計目標(為什麽要用spring)
如果我們要簡要地描述Spring的設計目標,可以這麽說,Spring為開發者提供的是一個一站式的輕量級應用開發框架(平臺)。作為平臺,Spring抽象了我們在許多應用開發中遇到的共性問題;同時,作為一個輕量級的應用開發框架,Spring和傳統的J2EE開發相比,有其自身的特點。通過這些自身的特點, Spring充分體現了它的設計理念:在Java EE的應用開發中,支持POJO和使用JavaBean的開發方式,使應用面向接口開發,充分支持OO(面向對象)的設計方法。

比如,在Java EE應用開發中,傳統的EJB開發需要依賴按照J2EE規範實現的J2EE應用服務器。我們的應用在設計,特別是實現時,往往需要遵循一系列的接口標準,才能夠在應用服務器的環境中得到測試和部署。這種開發方式,使應用在可測試性和部署上都會受到一些影響。Spring的設計理念采用了相對EJB而言的輕量級開發思想,即使用POJO的開發方式,只需要使用簡單的Java對象或者JavaBean就能進行Java EE開發,這樣開發的入門、測試、應用部署都得到了簡化。

另一方面,在我們的應用開發中,往往會涉及復雜的對象耦合關系,如果在Java代碼中處理這些耦合關系,對代碼的維護性和應用擴展性會帶來許多不便。而如果使用Spring作為應用開發平臺,通過使用Spring的IoC容器,可以對這些耦合關系(對Java代碼而言)實現一個文本化、外部化的工作,也就是說,通過一個或幾個XML文件,我們就可以方便地對應用對象的耦合關系進行瀏覽、修改和維護,這樣,可以在很大程度上簡化應用開發。同時,通過IoC容器實現的依賴反轉,把依賴關系的管理從Java對象中解放出來,交給了IoC容器(或者說是Spring框架)來完成,從而完成了對象之間的關系解耦: 原來的對象-對象的關系,轉化為對象-IoC容器-對象的關系,通過這種對象-IoC容器-對象的關系,更體現出IoC容器對應用的平臺作用。

從原文,提煉3點:
1、一站式的輕量級應用開發框
2、作為平臺,抽象了應用開發共性問題
3、支持POJO和使用JavaBean的開發方式,使應用面向接口開發,充分支持OO(面向對象)的設計方法

個人理解
一站式:圍繞spring核心的一個生態系統,比如springMVC、cloud、data等等
輕量:從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件裏發布。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類
共性問題:即完全解耦類之間的依賴關系
面向接口:如下xml片段

<beans default-autowire="byName">
<bean id="Test" class="DemoSpring.Test">
<property name="person" ref="pdao"/>
</bean>
<bean id="pdao" class="DemoSpring.Girl"></bean>
</beans>
DemoSpring依賴的是person接口,ref則指向了具體的實現類DemoSpring.Girl,妥妥的面向接口

以上是spring的設計目標,至於為什麽要用spring而不是其他的IOC容器,就拿Google大牛開發的Guice作為比較。

Guice其優勢在於: 1、速度快,號稱比spring快100倍。
2、無外部配置(如需要使用外部可以可以選用Guice的擴展包),完全基於annotation特性,支持重構,代碼靜態檢查。
3、簡單,快速,基本沒有學習成本。
和spring區別,詳見https://www.cnblogs.com/huapox/p/3516382.html
Guice優點是效率高,缺點是代碼侵入式(@inject直接侵入代碼,耦合到類層面),與其他框架集成沒有spring好。
br/>1、速度快,號稱比spring快100倍。
2、無外部配置(如需要使用外部可以可以選用Guice的擴展包),完全基於annotation特性,支持重構,代碼靜態檢查。
3、簡單,快速,基本沒有學習成本。
和spring區別,詳見https://www.cnblogs.com/huapox/p/3516382.html
Guice優點是效率高,缺點是代碼侵入式(@inject直接侵入代碼,耦合到類層面),與其他框架集成沒有spring好。
現在是企業級項目中,哪個是簡單的項目呢?

spring技術內幕筆記1