Spring不只只是一個框架,已然成爲一種生態,Spring能給咱們帶來什麼?

Spring是Java平臺的一個開源的全棧應用程序框架和控制反轉容器實現。 該框架的一些核心功能理論上可用於任何Java應用,但Spring還爲基於Java企業版平臺構建的 Web 應用提供了大量的拓展支持。雖然Spring沒有直接實現任何的編程模型,但它已經在 Java社區中廣爲流行,基本上徹底代替了企業級JavaBeans(EJB)模型。react

Spring框架以 Apache License 2.0 開源許可協議的形式發佈,該框架最初由 Rod Johnson 以及 Juergen Hoeller 等人開發。

1、版本歷史

初版由 Rod Johnson 開發,並在2002年10月發佈在 Expert One-on-One J2EE Design and Development 一書中。2003年6月,Spring Framework 第一次發佈在 Apache 2.0 許可證下。2004年3月,發佈了里程碑的版本1.0,2004年9月以及2005年3月,又發佈了新的里程碑版本。2006年,Spring Framework 得到了 Jolt 生產力獎 和 JAX 創新獎。程序員

2006年10月發佈Spring 2.0,2007年11月 Spring 2.5,2009年12月 Spring 3.0,2011年 Spring 3.1,2013年11月 Spring 3.2.5,2013年12月發佈了4.0版本。值得注意的是,Spring 4.0 版本中增長了對 Java SE 8, Groovy 2, Java EE 7 的一些方面以及 WebSocket 的支持。spring

2017年9月 Spring Framework 正式發佈了 5.0 版本,此版本引入了 Spring WebFlux,一個高性能、響應式、異步的 Web 框架。Spring 5.0 重點增強了對函數式編程、響應式程序設計(reactive programming)的支持能力,是一個很是大的進步。數據庫

2、核心功能模塊

  • 強大的基於 JavaBeans 的採用控制反轉(Inversion of Control,IoC)原則的配置管理,使得應用程序的組建更加簡易快捷。
  • 一個可用於 Java EE 等運行環境的核心 Bean工廠。
  • 數據庫事務的通常化抽象層,容許聲明式(Declarative)事務管理器,簡化事務的劃分使之與底層無關。
  • 內建的針對 JTA 和單個 JDBC 數據源的通常化策略,使Spring的事務支持不要求 Java EE 環境,這與通常的 JTA 或者 EJB CMT 相反。
  • JDBC 抽象層提供了有針對性的異常等級(再也不從SQL異常中提取原始代碼),簡化了錯誤處理,大大減小了程序員的編碼量。再次利用JDBC時,你無需再寫出另外一個'終止'(finally)模塊。而且面向 JDBC 的異常與 Spring 通用數據訪問對象(Data Access Object)異常等級相一致。
  • 以資源容器,DAO 實現和事務策略等形式與 Hibernate,JDO 和 MyBatis 、SQL Maps 集成。利用控制反起色制全面解決了許多典型的Hibernate集成問題。全部這些所有聽從 Spring 通用事務處理和通用數據訪問對象異常等級規範。
  • 靈活的基於核心 Spring功能的MVC網頁應用程序框架。開發者經過策略接口將擁有對該框架的高度控制,於是該框架將適應於多種呈現(View)技術,例如JSP、FreeMarker、Velocity、Thymeleaf等。值得注意的是,Spring中間層能夠輕易地結合於任何基於 MVC 框架的網頁層,例如 Struts、WebWork 或 Tapestry。
  • 提供諸如事務管理等服務的AOP框架。
  • 在設計應用程序 Model時,MVC模式(例如Struts)一般難於給出一個簡潔明瞭的框架結構。Spring 卻具備可以讓這部分工做變得簡單的能力。程序開發員們可使用Spring的JDBC抽象層從新設計那些複雜的框架結構。

3、從Bean開始

最先的1996年開始可使用Java的Applet來開發Web應用,做爲瀏覽器組件。但開發者們很快就發現這個新興的語言還能作更多的事情。同年12月,Sun公司發佈了當時還名不見經傳但後來人盡皆知的 JavaBean 1.00-A 規範。編程

複雜的應用一般須要事務、安全、分佈式等服務的支持,但JavaBean並未直接提供。因此到了 1998年 3 月,Sun公司發佈了EJB1.0規範,該規範把Java組件的設計理念延伸到了服務器端,並提供了許多必須的企業級服務,但他也再也不像早期的JavaBean 那麼簡單了。實際上,除了名字叫 EJB Bean之外,其餘的和 JavaBean關係不大了。設計模式

儘管現實中有不少系統是基於EJB構建的,但EJB歷來沒有實現它最初的設想:簡化開發。EJB 的聲明式編程模型的確簡化了不少基礎架構層面的開發,例如事務和安全;但另外一方面 EJB 在部署描述符和配套代碼實現等方面變得異常複雜。隨着時間的推移,不少開發者對 EJB 已經再也不抱有幻想,開始尋求更簡潔的方法。瀏覽器

客觀地講,EJB 的發展甚至促進了基於 POJO 的編程模型。到了 EJB 3 規範發 布時,其餘基於 POJO的開發架構已經成爲事實的標準了,而Spring框架也就是在這樣的大環境下出現的。緩存

4、Spring能給咱們帶來什麼

4.1 Spring簡化開發的四個基本策略

  • 基於POJO的輕量級和最小侵入性編程
  • 經過依賴注入和麪向接口鬆耦合
  • 基於切面和慣性進行聲明式編程
  • 經過切面和模板減小樣板式代碼

Spring主要經過:面向Bean(BOP)、依賴注入(DI)和麪向切面(AOP)這三種方式來達成的。安全

AOP、IOC和DI之間的關係服務器

4.2 BOP編程

Spring 是面向 Bean 的編程(Bean Oriented Programming, BOP),Bean 在Spring 中才是真正的主角。Bean 在 Spring 中做用就像 Object 對OOP的意義同樣,Spring 中沒有 Bean 也就沒有Spring存在的意義。Spring提供了IOC容器經過配置文件或者註解的方式來管理對象之間的依賴關係。

控制反轉(其中最多見實現方式叫作依賴注入(Dependency Injection,DI),還有一種方式叫「依賴查找」(Dependency Lookup,DL),她在 C++、Java、PHP 以及.NET 中都運用。在最先的Spring中是包含有依賴注入方法和依賴查詢的,但由於依賴查詢使用頻率太低,不久就被Spring移除了,因此在Spring中控制反轉也被直接稱做依賴注入),她的基本概念是:不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IOC 容器)負責將這些聯繫在一塊兒。

在典型的 IOC 場景中,容器建立了全部對象,並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間調用方法。

4.3 依賴注入

Spring 設計的核心 org.springframework.beans包(架構核心是org.springframework.core包),它的設計目標是與JavaBean組件一塊兒使用。這個包一般不是由用戶直接使用,而是由服務器將其用做其餘多數功能的底層中介。下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,容許經過名稱建立和檢索對象。BeanFactory 也能夠管理對象之間的關係。

BeanFactory 最底層支持兩個對象模型:

  • 單例:提供了具備特定名稱的全局共享實例對象,能夠在查詢時對其進行檢索。Singleton 是默認的也是最經常使用的對象模型。

  • 原型:確保每次檢索都會建立單獨的實例對象。在每一個用戶都須要本身的對象時,採用原型模式。

Bean 工廠的概念是 Spring做爲IOC容器的基礎。IOC則將處理事情的責任從應用程序代碼轉移到框架。

4.4 AOP 編程

面向切面編程,即 AOP,是一種編程思想,它容許程序員對橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP的核心構造是方面(切面),它將那些影響多個類的行爲封裝到可重用的模塊中。

AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的複雜問題。在典型的面向對象開發方式中,可能要將日誌記錄語句放在全部方法和 Java 類中才能實現日誌功能。在AOP方式中,能夠反過來將日誌服務模塊化,並以聲明的方式將它們應用到須要日誌的組件上。固然,優點就是Java類不須要知道日誌服務的存在,也不須要考慮相關的代碼。因此,用SpringAOP編寫的應用程序代碼是鬆散耦合的。

AOP 的功能徹底集成到了 Spring 事務管理、日誌和其餘各類特性的上下文中。

AOP 編程的經常使用場景有:Authentication(權限認證)、Auto Caching(自動緩存處理)、Error Handling (統一錯誤處理)、Debugging(調試信息輸出)、Logging(日誌記錄)、Transactions(事務處理) 等。

5、Spring5的系統架構

Spring 總共大約有 20個模塊,由1300多個不一樣的文件構成。而這些組件被分別整合在覈心容器(Core Container)、AOP(Aspect Oriented Programming)和設備支持(Instrmentation)、數據訪問 及集成(Data Access/Integeration)、Web、報文發送(Messaging)、Test,6 個模塊集合中。以 下是 Spring 5 的模塊結構圖:

相關文章
相關標籤/搜索