1.簡化Java開發 Spring是一個開源框架,它的根本使命在於簡化java開發。為了降低java開發的複雜性,Spring採取了以下4種關鍵策略: 1.基於POJO的輕量級和最小侵入性編程; 有很多框架強迫應用繼承它們的類或實現它們的介面從而導致應用與框架綁死,而基於Spring構建的應用通常沒 ...
1.簡化Java開發
Spring是一個開源框架,它的根本使命在於簡化java開發。為了降低java開發的複雜性,Spring採取了以下4種關鍵策略:
1.基於POJO的輕量級和最小侵入性編程;
有很多框架強迫應用繼承它們的類或實現它們的介面從而導致應用與框架綁死,而基於Spring構建的應用通常沒有任何痕跡表明你使用了Spring,最壞的場景是一個類或許會用到Spring註解,但它依舊是POJO。
2.通過依賴註入和麵向介面實現松耦合;
任何應用都會由多個類相互協作完成業務邏輯,按照傳統做法,每個對象負責管理與自己協作的對象的引用,這會導致代碼高度耦合和難以測試。通過依賴註入(DI),對象的依賴關係由Spring負責管理,對象無需創建或管理它們的依賴關係,依賴關係將被自動註入到需要到它們的對象中去。通過面向介面,依賴能夠用不同的具體實現進行替換。創建組件之間協作的行為通常稱為裝配,Spring通過應用上下文裝載bean的定義並把它們組裝起來,Spring應用上下文全權負責對象的創建和組裝。Spring有多種應用上下文的實現,它們的區別在於載入配置的方式不同。
3.基於切麵和慣例進行聲明式編程;
面向切麵編程(AOP)能夠將遍佈應用各處的功能分離出來形成可重用的組件。AOP能夠使諸如日誌、事務管理和安全這些服務模塊化,並以聲明的方式將它們應用到需要它們影響的組件中去。這樣這些組件會具有更高的內聚性並且會更加關註自身的業務。AOP能夠確保POJO的簡單性。
4.通過切麵和模板減少樣板式代碼。
Spring旨在通過模板封裝來消除樣板式代碼。
2.容納你的Bean
在基於Spring的應用中,應用對象生存於Spring容器中,Spring容器負責創建對象,裝配它們,配置它們並管理它們的整個生命周期。Spring自帶多個容器實現,可以歸為兩種不同的類型。bean工廠是最簡單的容器,提供基本的DI支持。應用上下文基於BeanFactory構建,提供應用框架級別的服務,通常選擇應用上下文作為Spring容器的實現。Spring容器中的bean的生命周期相對複雜,正確理解Spring bean的生命周期非常重要,因為你或許要利用Spring提供的擴展點來自定義bean的創建過程。
3.俯瞰Spring風景線
Spring的核心在於DI和AOP,Spring框架包含多個模塊,為開發企業級應用提供了所需的一切,但開發者不必將應用建立在整個Spring框架之上,可以選擇自身應用需求的Spring模塊,當Spring不能滿足需求時,也可以考慮其它選擇,Spring提供了與其它第三方框架和類庫的集成點。
3.1.Spring模塊
1.Spring核心容器
容器是Spring框架最核心的部分,它管理Spring應用中bean的創建、配置和管理。該模塊包括了Bean工廠和基於Bean工廠的多種Spring應用上下文的實現。除此之外,該模塊提供了許多企業級服務,如E-mail、JNDI訪問、EJB集成和調度。
2.Spring的AOP模塊
這個模塊是Spring應用中開發切麵的基礎,與DI一樣,AOP可以幫助應用對象解耦。藉助於AOP,可以將遍佈系統的關註點(例如事務和安全)從它們所應用的對象中解耦出來。
3.數據訪問與集成
通過JDBC編寫代碼通常會導致大量的樣板式代碼,Spring的JDBC和DAO模塊抽象了樣板式代碼,使資料庫代碼變得簡單明瞭。Spring也提供了ORM模塊,Spring的ORM模塊建立在對DAO的支持之上,併為多個ORM框架提供了一種構建DAO的簡便方式,Spring集成了多個流行的ORM框架。本模塊包含了在JMS之上構建的Spring抽象層,它會使用消息以非同步的方式與其它應用集成。本模塊還包含對象到XML映射的特性,它最初是Spring Web Service項目的一部分。除此之外,本模塊會使用Spring AOP模塊為Spring應用中的對象提供事務管理服務。
4.Web與遠程調用
MVC模式是一種普遍被接受的構建Web應用的方法,本模塊自帶了一個強大的MVC框架,有助於在Web層提供應用的松耦合水平。該模塊還提供了多種構建與其它應用交互的遠程調用方案。Spring遠程調用功能集成了RMI、Hessian、Burlap、JAX-WS,同時還自帶了一個遠程調用框架HTTP invoker。Spring還提供了暴露和使用REST API的良好支持。
5.Instrumentation
本模塊提供了為JVM添加代理的功能。本模塊的使用場景非常有限。
6.測試
Spring提供了測試模塊以致力於Spring應用的測試。Spring為使用JNDI、Servlet和Portlet編寫單元測試提供了一系列的mock對象實現。對於集成測試,該模塊為載入Spring應用上下文中的bean集合以及Spring上下文的bean進行交互提供了支持。
3.2.Spring Portfolio
Spring Portfolio包括多個構建於核心Spring框架之上的框架和類庫,包括Spring Web Flow(基於流程的會話式Web應用,如購物車、嚮導功能)、Spring Security(利用AOP,Spring Security為Spring應用提供了聲明式的安全機制)、Spring Data(為多種資料庫類型,無論是關係型資料庫還是NoSQL資料庫,都提供了一種簡單的編程模型)、Spring Boot(簡化Spring本身,Spring Boot大量依賴於自動配置技術,能夠消除大部分Spring配置)。