Spring框架的演變

什麼是Spring

若是想要解釋Spring,那麼最難的部分就是對其進行分類。一般狀況下,Spring被描述爲構建Java應用程序的輕量級框架,但這種描述帶來了兩個有趣的觀點。git

首先,與許多其餘框架(好比僅限於Web應用程序的Apache Struts)不一樣,可使用Spring構建Java中的任何應用程序(例如,獨立的應用程序、Web應用程序或JEE應用程序)。github

其次,該描述中輕量級的,由於只須要對應用程序代碼進行不多的更改(若是有的話)就能夠得到Spring Core所帶來的好處。若是想要在任什麼時候候中止使用Spring,那麼你會發現能夠很容易作到。web

請注意,上述描述僅針對Spring Core-許多額外的Spring組件(例如數據訪問)須要更緊密地與Spring框架耦合。然而,這種耦合的好處是很是明顯的。spring

Spring框架的演變

在過去十年中,Spring框架在覈心功能、相關項目以及社區支持方面發展迅猛。今天就來一塊兒快速回顧一下Spring的每一個里程碑版本所帶來的重要特性,並最終發展Spring Framework5.0。數據庫

Spring 0.9

這是該框架第一個公開發布的版本,以Exper One-on-One:J2EE Design and Development一書 爲基礎,提供了bean配置基礎、AOP支持、JDBC抽象框架、抽象事務支持等。該版本沒有官方參考文檔,但能夠在SourceForge上找到現有的源代碼和文檔。編程

Spring 1.x

這是發佈的第一個帶有官方參考文檔的版本。它由下圖所示的七個模塊組成。架構

➣ Spring Core:bean容器以及支持的實用程序。併發

➣ Spring Context:ApplicationContext、UI、驗證、JNDI、Enterprise JavaBean(EJB)、遠程處理和郵件支持。app

➣ Spring ORM:Hibernate、iBATIS和Java Data Object(JDO)支持。框架

➣ Spring AOP:符合AOP聯盟的面向方面編程(AOP)實現。

➣ Spring Web:基本集成功能,好比多部分功能、經過servlet偵聽器進行上下文初始化以及面向Web的應用程序上下文。

➣ Spring Web MVC:基於Web 的Model-View-Controller(MVC)框架。

Spring 2.x

該版本由下圖所示的六個模塊組成。如今Spring Context模塊包含在Spring Core中,而在Spring 2.x 版本中,全部的Spring Web組件都由單個項目表示。

➣ 經過使用心得基於XML Schema的配置而不是DTO格式來簡化XML配置。值得注意的改進方面包括bean定義、AOP以及聲明式事務。

➣ 用於Web和門戶的新bean做用域(請求、會話和全局會話)。

➣ 支持AOP開發的@AspectJ註解。

➣ Java Persistence API(JPA)抽象層。

➣ 徹底支持異步JMS消息驅動的POJO(用於普通的舊Java對象)。

➣ JDBC簡化包括在使用Java5+時的SimpleJdbcTemplate。

➣ JDBC命名參數支持(NamedParameterJdbcTemplate)。

➣ 針對Spring MVC的表單標籤庫。

➣ 對Porlet MVC框架的介紹。

➣ 動態語言支持。可使用JRuby、Groovy以及BeanShell來編寫bean。

➣ JMX中的通知支持以及可控的MBean註冊。

➣ 爲調度任務而引入的TaskExecutor註冊。

➣ 爲調度任務而引入的TaskExecutor抽象。

➣ Java註解支持,特別針對@Transactional、@Required和@AspectJ。

Spring 2.5.x

該版本包含如下功能。

➣ 名爲@Autowired 的新配置註解以及對JSR-250註解(@Resource、@PostConstruct和PreDestroy)支持。

➣ 新的構造型註解:@Component、@Repository、@Service、和@Controller。

➣ 自動類路徑掃描支持,能夠檢測和鏈接帶有構造型註解的類。

➣ AOP更新,包括一個新的bean切入點元素以及AspectJ加載時織入(weaving)。

➣ 完整的WebSphere事務管理支持。

➣ 除了SpringMVC@Controller註解,還添加了@RequestMapping、@RequestParam和@ModelAttribure註解,從而支持經過註解配置進行請求處理。

➣ 支持Tiles2。

➣ 支持JSF1.2。

➣ 支持JAX-WS2.0/2.1。

➣ 引入了Spring TestContext Framework,提供註解驅動和集成測試支持,不受所用測試框架的影響。

➣ 可以將Spring應用程序上下文部署爲JCA適配器。

Spring 3.0.x

這是基於Java5的第一個版本,旨在充分利用Java5的功能,如泛型、可變參數和其餘語言改進。該版本引入了基於Java的@Configuration模型。目前已經對框架模塊進行了修改,分別針對每一個模塊JAR使用一棵源代碼樹進行管理。

以下圖所示的抽象描述

 

➣ 支持Java5功能,例如泛型、可變參數以及其餘改進。

➣ 對Callables、Futures、ExceutoService適配器和ThreadFactory集成提供很好的支持。

➣ 框架模塊目前針對每一個模塊JAR都使用一課源代碼樹進行分別管理。

➣ Spring Expression Language(SpEL)的引入。

➣ 核心Java Config功能和註解的集成。

➣ 通用型轉換系統和字段格式化系統。

➣ 全面支持REST。

➣ 新的MVC XML名稱空間和其餘註解,例如Spring MVC中的@CookieValue和@RequestHeaders。

➣ 驗證加強功能和JSR-303(bean驗證)支持。

➣ 對JavaEE6的早期支持,包括@Async/@Asynchronous註解、JSR30三、JSF2.0、JPA2.0等。

➣ 支持嵌入式數據庫,例如HSQL、H2和Derby。

Spring 3.1.x

該版本包含如下功能。

➣ 新的緩衝對象。

➣ 能夠用XML定義bean定義配置文件,同時也支持@Profile註解。

➣ 針對統一屬性管理的環境抽象。

➣ 與常見Spring XML名稱空間元素等價的註解,如@ComponentScan、@EnableTransationManagement、@EnableCaching、@EnableScheduling、@EnableAsync、@EnableAspectAutoProxy、@EnableLoadTimeWeaving和@EnableSpringConfigured。

➣ 支持Hibernate 4。

➣ Spring TestContext Framework對@Configuration類和bean定義配置文件的支持。

➣ 名稱空間 c:簡化了構造函數注入。

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:c="http://www.springframework.org/schema/c"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd">
      
  <bean id="bar" class="x.y.Bar"/>
  <bean id="baz" class="x.y.Baz"/>

  <-- 'traditional' declaration -->      
  <bean id="foo" class="x.y.Foo">
      <constructor-arg ref="bar"/>
      <constructor-arg ref="baz"/>
      <constructor-arg value="foo@bar.com"/>
  </bean>

  <-- 'c-namespace' declaration -->
  <bean id="foo" class="x.y.Foo" c:bar-ref="bar" c:baz-ref="baz" c:email="foo@bar.com">

</beans>

➣ 支持Servlet 3中Servlet容器的基於代碼的配置。

➣ 可以在不使用persistence.xml的狀況下啓動JPA EntityManagerFactory。

➣ 將Flash和RedirectAttributes添加到Spring MVC中,從而容許經過使用HTTP會話重定向屬性。

➣ URI模板變量加強功能。

➣ 可以使用@Valid來註解Spring MVC @RequestBody 控制器方法參數。

➣ 可以使用@RequestPart來註解Spring MVC 控制器方法參數。

Spring 3.2.x

該版本包含如下功能。

➣ 支持基於Servlet 3的一步請求處理。

➣ 新的Spring MVC 測試框架。

➣ 新的Spring MVC 註解@ControllerAdvice 和 @Matrix Variable。

➣ 支持RestTemplate和@RequestBody參數中泛型類型。

➣ 支持Jackson JSON2。

➣ 支持Tiles 3。

➣ 如今,@RequestBody或@RequestPart參數的後面能夠跟着一個Errors參數,從而能夠對驗證錯誤進行處理。

➣ 可以經過使用MVC名稱空間和Java Config 配置選項來排除URL模式。

➣ 支持沒有Joda Time的@DateTimeFormat.

➣ 全局日期和時間格式化。

➣ 跨框架的併發優化,從而最小化鎖定,並改進了做用域/原型bean的併發建立。

➣ 新的機遇Gradle的構建系統。

➣ 遷移到Github(https://github.com/spring-projects/spring-framework)。

➣ 在框架和第三方依賴中支持精簡的Java SE7/OpenJDK 7。如今,CGLIB和ASM已經成爲Spring的一部分。除了AspectJ1.6,其餘版本都支持AspectJ 1.7。

Spring 4.0.x

這是一個重要的Spring版本,也是第一個徹底支持Java 8的版本。雖然仍然可使用較舊版本的Java,但Java SE6已經提出了最低版本要求。啓用的類和方法已經被刪除,但模塊組織幾乎相同。

以下圖所示

➣ 經過 www.spring.io/guides 網站上的一系列入門指南提升了入門體驗。

➣ 從先前的Spring 3 版本中刪除棄用的軟件包和方法。

➣ 支持Java8,將最低Java版本提升到6 update 18。

➣ Java EE6 及以上版本如今被認爲是Spring Framework 4.0的基準。

➣ Groovy bean定義DSL,容許經過Goovy語法配置bean定義。

➣ 核心容器、測試和通常web改進。

➣ WebSocket、SocJS、和STOMP消息。

Spring4.2.x

該版本包含如下功能。

➣ 核心改進(例如,引入@AliaFor,並修改現有的註解以使用它)。

➣ 全面支持Hibernate ORM 5.0。

➣ JMS和Web改進。

➣ 對WebSocket消息傳遞的改進。

➣ 測試改進,最引人注目的是引入了@Commit來替換@Rollback(false),並引入AopTestUtils使用工具類,容許訪問隱藏在Spring代理後面的底層對象。

Spring 4.3.x

該版本包含如下功能。

➣ 完善了編程模型。

➣ 在覈心容器(包含ASM 5.一、CGLIB 3.2.4以及spring-core.jar中的Objenesis 2.4)和MVC方面有了至關大的改進。

➣ 添加了組合註解。

➣ Spring TestContext Framework須要JUnit 4.12或更高版本。

➣ 支持新的庫,包括Hibernate ORM 5.二、Hibernate Validator 5.三、Tomcat 8.5和9.0、Jackson 2.8等。

Spring 5.x

➣ 這是一個主要版本。整個框架代碼都基於Java 8,而且自2016年7月起與Java 9徹底兼容。

➣ 支持Portlet、Veloctiy、JaspReports、XMLBeans、JDO、Guava、Tiles 2和Hibernate 3。

➣ 如今XML 配置名稱空間被流式傳輸到未版本化的模式;雖然特定版本的聲明仍然被支持,但要針對最新的XSD架構進行驗證。

➣ 充分利用Java 8 的強大功能,從而在性能上獲得極大的改進。

➣ Resource 抽象爲防護 getFile 訪問提供了isFile指示符。

➣ Spring 提供的Filter實現徹底支持Servlet 3.1簽名。

➣ 支持 Protobuf 3.0。

➣ 支持JMS 2.0+和JPA 2.0+。

➣ 引入了Spring Web Flow,這是一個用於替代Spring MVC的項目,構建在反應式基礎之上,這意味着他徹底是異步和非阻塞的,主要用戶事件循環執行模型,而非傳統的每一個請求執行模式都帶有一個線程的大型線程池(基於Project Reactor構建)。

➣ Web 和核心模塊適用於反應式編程模型。

➣ Spring 測試模塊有了很大的改進。如今支持JUnit 5,引入了新的註解來支持 Jupiter 編程和擴展模型,例如@SpringUnitConfig、@SpringJUnitWebConfig、@EnabledIf和@DisabledIf。

➣ 支持在 Spring TestContext Framework 中實現並行測試執行。

 

 

 

Spring 框架雖然在不斷的演變,可是核心的原理尚未太大變化的。用IOC或DI來以不變應萬變。下次介紹核心內容的演變。

相關文章
相關標籤/搜索