Spring框架的演變


什么是Spring

如果想要解釋Spring,那么最難的部分就是對其進行分類。通常情況下,Spring被描述為構建Java應用程序的輕量級框架,但這種描述帶來了兩個有趣的觀點。

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

其次,該描述中輕量級的,因為只需要對應用程序代碼進行很少的更改(如果有的話)就可以獲得Spring Core所帶來的好處。如果想要在任何時候停止使用Spring,那么你會發現可以很容易做到。

請注意,上述描述僅針對Spring Core-許多額外的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)、遠程處理和郵件支持。

➣ 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注解、JSR303、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.1、CGLIB 3.2.4以及spring-core.jar中的Objenesis 2.4)和MVC方面有了相當大的改進。

➣ 添加了組合注解。

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

➣ 支持新的庫,包括Hibernate ORM 5.2、Hibernate Validator 5.3、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來以不變應萬變。下次介紹核心內容的演變。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM