官术网_书友最值得收藏!

6.1 Spring概述

自Spring誕生以來,Spring在Java EE企業(yè)級應用中應用廣泛,致力于簡化傳統(tǒng)Java EE企業(yè)級應用開發(fā)過程中煩瑣的過程。其實Spring所涵蓋的意義遠遠不止是一個應用框架,下面就來詳細解讀Spring。

6.1.1 Spring的廣義與狹義

Spring有狹義與廣義之說。

1.狹義上的Spring——Spring框架

狹義上的Spring特指Spring框架(Spring Framework)。Spring框架是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的,它的主要優(yōu)勢之一就是分層架構。分層架構允許使用者選擇使用哪一個組件,同時為Java EE應用程序開發(fā)提供集成的框架。Spring框架使用基本的POJO來完成以前只可能由EJB完成的事情。Spring框架不僅僅限于服務器端的開發(fā),而且從簡單性、可測試性和松耦合的角度來看,Java應用開發(fā)均可以從Spring框架中獲益。Spring框架的核心是控制反轉(IoC)和面向切面(AOP)。簡單來說,Spring框架是一個分層的、面向切面與Java應用的一站式輕量級開源框架。

Spring框架的前身是Rod Johnson在Expert One-on-One J2EE Design and Development一書中發(fā)表的包含3萬行代碼的附件。在該書中,他展示了如何在不使用EJB的情況下構建高質量、可擴展的在線座位預留應用程序。為了構建該應用程序,他寫了上萬行的基礎結構代碼。這些代碼包含許多可重用的Java接口和類,如ApplicationContext和BeanFactory等。由于Java接口是依賴注入的基本構件,因此他將類的根包命名為com.interface21,意味著這個框架是面向21世紀的。根據書中的描述,這些代碼已經在一些真實的金融系統(tǒng)中使用。

由于該書影響甚廣,當時有幾個開發(fā)人員(如Juergen Hoeller和Yann Caroff)聯系Rod Johnson,希望將com.interface21代碼開源。Yann Caroff將這個新框架命名為Spring,其含義為Spring就像一縷春風掃平傳統(tǒng)J2EE的寒冬。所以說,Rod Johnson、Juergen Hoeller及Yann Caroff是Spring框架的共同創(chuàng)立者。

2003年2月,Spring 0.9發(fā)布,采用了Apache 2.0開源協議。2004年4月,Spring 1.0發(fā)布。截至目前,Spring框架已經是第5個主要版本了。有關Spring 5方面的內容可以參閱筆者所著的《Spring 5開發(fā)大全》(1)

2.廣義上的Spring——Spring技術棧

廣義上的Spring是指以Spring框架為核心的Spring技術棧。這些技術棧涵蓋從企業(yè)級應用到云計算等各個方面的內容,具體如下:

  • Spring Data:Spring框架中的數據訪問模塊對JDBC及ORM提供了很好的支持。隨著NoSQL和大數據的興起,出現了越來越多的新技術,如非關系型數據庫、MapReduce框架。Spring Data正是為了讓Spring開發(fā)者能更方便地使用這些新技術而誕生的“大”項目——它由一系列小的項目組成,分別為不同的技術提供支持,如Spring Data JPA、Spring Data Hadoop、Spring Data MongoDB、Spring Data Redis等。通過Spring Data,開發(fā)者可以用Spring提供的相對一致的方式來訪問位于不同類型的數據存儲中的數據。在本書后續(xù)章節(jié)中,也會對Spring Data Redis的使用進行詳細的介紹。
  • Spring Batch:一款專門針對企業(yè)級系統(tǒng)中的日常批處理任務的輕量級框架,能夠幫助開發(fā)者方便地開發(fā)出健壯、高效的批處理應用程序。通過Spring Batch可以輕松構建出輕量級的、健壯的并發(fā)處理應用,并支持事務、并發(fā)、流程、監(jiān)控、縱向和橫向擴展,提供統(tǒng)一的接口管理和任務管理。Spring Batch對批處理任務進行了一定的抽象,它的架構可以大致分為3層,自上而下分別是業(yè)務邏輯層、批處理執(zhí)行環(huán)境層和基礎設施層。Spring Batch可以很好地利用Spring框架所帶來的各種便利,同時也為開發(fā)者提供了相對熟悉的開發(fā)體驗。有關Spring Batch方面的內容可以參閱筆者所著的《Cloud Native分布式架構原理與實踐》(2)
  • Spring Security:前身是Acegi,是較為成熟的子項目之一,是一款可定制化的身份驗證和訪問控制框架。讀者如果對該技術感興趣,那么可以參閱筆者所著的開源書《Spring Security教程》(3),以了解更多Spring Security方面的內容。在本書后續(xù)章節(jié)中,會對Spring Security的使用進行詳細的介紹。
  • Spring Boot:指Spring團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建及開發(fā)過程。該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置。Spring Boot為Spring平臺及第三方庫提供了“開箱即用”的設置,這樣就可以有條不紊地進行應用的開發(fā)。多數Spring Boot應用只需要很少的Spring配置。通過這種方式,Spring Boot致力于在蓬勃發(fā)展的快速應用開發(fā)領域成為領導者。讀者如果對該技術感興趣,那么可以參閱筆者所著的《Spring Boot企業(yè)級應用開發(fā)實戰(zhàn)》(4)及開源書《Spring Boot教程》(5),以了解更多Spring Boot方面的內容。在本書后續(xù)章節(jié)中,會對Spring Boot的使用進行詳細的介紹。
  • Spring Cloud:使用Spring Cloud,開發(fā)人員可以“開箱即用”地實現分布式系統(tǒng)中常用的服務。這些服務可以在任何環(huán)境下運行,不僅包括分布式環(huán)境,還包括開發(fā)人員的筆記本電腦、裸機數據中心以及Cloud Foundry等托管平臺。Spring Cloud基于Spring Boot來構建服務,并可以輕松地集成第三方類庫來增強應用程序的行為。

Spring技術棧還有很多,如果讀者感興趣,可以訪問Spring項目頁面(https://spring.io/projects)了解更多信息。

3.約定

由于Spring是早期Spring框架的總稱,因此有時候Spring這個命名會給讀者帶來困擾。本書約定Spring框架特指狹義上的Spring,即Spring Framework;而Spring特指廣義上的Spring,泛指Spring技術棧。

6.1.2 Spring框架總覽

Spring框架是整個Spring技術棧的核心。Spring框架實現了對bean的依賴管理及AOP的編程方式,這些都極大地提升了Java企業(yè)級應用開發(fā)過程中的編程效率,降低了代碼之間的耦合。

Spring框架是很好的一站式構建企業(yè)級應用的輕量級的解決方案。

1.模塊化的Spring框架

Spring框架是模塊化的,允許開發(fā)人員自由選擇需要使用的部分。例如,可以在任何框架上使用IoC容器,也可以只使用Hibernate集成代碼或JDBC抽象層。Spring框架支持聲明式事務管理,通過RMI或Web服務遠程訪問用戶的邏輯,并支持多種選擇來持久化用戶的數據。它提供了一個全功能的Spring Web MVC及Spring WebFlux框架,同時也支持AOP集成到軟件中。

2.使用Spring的好處

Spring框架是一個輕量級的Java平臺,能夠提供完善的基礎設施用來支持開發(fā)Java應用程序。Spring負責基礎設施功能,開發(fā)人員可以專注于應用邏輯的開發(fā)。Spring可以使用POJO來構建應用程序,并將企業(yè)服務非侵入性地應用到POJO。此功能適用于Java SE編程模型和完全或部分Java EE模型。

作為一個Java應用程序的開發(fā)者,可以從Spring平臺獲得以下好處:

  • 使本地Java方法可以執(zhí)行數據庫事務,而無須自己處理事務API。
  • 使本地Java方法可以執(zhí)行遠程過程,而無須自己處理遠程API。
  • 使本地Java方法成為HTTP端點,而無須自己處理Servlet API。
  • 使本地Java方法可以擁有管理操作,而無須自己處理JMX API。
  • 使本地Java方法可以執(zhí)行消息處理,而無須自己處理JMS API。

6.1.3 Spring框架常用模塊

Spring框架基本涵蓋了企業(yè)級應用開發(fā)的各個方面,它由二十多個模塊組成。

1.核心容器

核心容器(Core Container)由spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring Expression Language)模塊組成。

  • spring-core和spring-beans模塊提供框架的基礎部分,包括IoC和Dependency Injection功能。BeanFactory是一個復雜工廠模式的實現,無須編程就能實現單例,并允許開發(fā)人員將配置和特定的依賴從實際程序邏輯中解耦。
  • spring-context模塊建立在spring-core和spring-beans模塊提供的功能基礎之上,它是一種在框架類型下實現對象存儲操作的手段,有一點像JNDI注冊。spring-context繼承了spring-beans模塊的特性,并且增加了對國際化的支持(如用在資源包中)、事件廣播、資源加載和創(chuàng)建上下文(如一個Servlet容器)。spring-context模塊也支持如EJB、JMX和基礎遠程訪問的Java EE特性。ApplicationContext接口是spring-context模塊的主要表現形式。spring-context-support模塊提供了對常見第三方庫的支持,以便集成到Spring應用上下文,如緩存(EhCache、JCache)、調度(CommonJ、Quartz)等。
  • spring-expression模塊提供了一種強大的表達式語言,用來在運行時查詢和操作對象圖。它是作為JSP 2.1規(guī)范所指定的統(tǒng)一表達式語言的一種擴展。這種語言支持對屬性值、屬性參數、方法調用、數組內容存儲、收集器和索引、邏輯和算數的操作及命名變量,并且通過名稱從Spring的控制反轉容器中取回對象。表達式語言模塊還支持列表投影、選擇和通用列表聚合。

2.AOP及Instrumentation

spring-aop模塊提供AOP(面向切面編程)的實現,從而能夠實現方法攔截器和切入點完全分離代碼。使用源碼級別元數據的功能也可以在代碼中加入行為信息,在某種程度上類似于.NET屬性。

單獨的spring-aspects模塊提供了集成使用AspectJ。spring-instrument模塊提供了類instrumentation的支持和在某些應用程序服務器使用類加載器實現。spring-instrument-tomcat用于Tomcat Instrumentation代理。

3.消息

自Spring Framework 4版本開始提供spring-messaging模塊,主要包含從Spring Integration項目中抽象出來的如Message、MessageChannel、MessageHandler及其他用來提供基于消息的基礎服務。

該模塊還包括一組消息映射方法的注解,類似基于編程模型中的Spring MVC的注解。

4.數據訪問/集成

數據訪問/集成(Data Access/Integration)層由JDBC、ORM、OXM、JMS和Transaction模塊組成。

  • spring-jdbc模塊提供了一個JDBC抽象層,這樣開發(fā)人員就能避免進行一些煩瑣的JDBC編碼和解析數據庫供應商特定的錯誤代碼。
  • spring-tx模塊支持用于實現特殊接口和所有POJO類的編程及聲明式事務管理。
  • spring-orm模塊為流行的對象關系映射API提供集成層,包括JPA和Hibernate。使用spring-orm模塊可以將這些O/R映射框架與Spring提供的所有其他功能結合使用,如前面提到的簡單的聲明式事務管理功能。
  • spring-oxm模塊提供了一個支持Object/XML映射實現的抽象層,如JAXB、Castor、JiBX和XStream。
  • spring-jms模塊包含用于生成和使用消息的功能。從Spring Framework 4.1開始,它提供了與spring-messaging的集成。

5.Web

Web層由spring-web、spring-webmvc、spring-websocket和spring-webflux組成。

  • spring-web模塊提供了基本的面向Web開發(fā)的集成功能,如文件上傳及用于初始化IoC容器的Servlet監(jiān)聽和Web開發(fā)應用程序上下文。它也包含HTTP客戶端及Web相關的Spring遠程訪問的支持。
  • spring-webmvc模塊(也稱Web Servlet模塊)包含Spring的MVC功能和REST服務功能。
  • spring-websocket模塊是基于WebSocket協議通信的程序開發(fā)。
  • spring-webflux模塊是Spring 5新添加的支持響應式編程的Web開發(fā)框架。

6.測試

spring-test模塊支持通過組合JUnit或TestNG來實現單元測試和集成測試等功能。它不僅提供了Spring ApplicationContexts的持續(xù)加載,并能緩存這些上下文,而且提供了可用于孤立測試代碼的模擬對象(Mock Objects)。

6.1.4 Spring設計模式

在Spring框架設計中廣泛使用了設計模式。Spring使用以下設計模式使企業(yè)級應用開發(fā)變得簡單和可測試。

  • Spring使用POJO模式的強大功能來實現企業(yè)應用程序的輕量級和最小侵入性的開發(fā)。
  • Spring使用依賴注入模式(DI模式)實現松耦合,并使系統(tǒng)可以更加面向接口編程。
  • Spring使用Decorator和Proxy設計模式進行聲明式編程。
  • Spring使用Template設計模式消除樣板代碼。
主站蜘蛛池模板: 乐平市| 都江堰市| 上思县| 焉耆| 齐齐哈尔市| 菏泽市| 木兰县| 安塞县| 延寿县| 仁布县| 南岸区| 阿拉善左旗| 晋城| 民和| 新蔡县| 东城区| 津南区| 临沂市| 离岛区| 政和县| 广水市| 兴仁县| 津南区| 建昌县| 普兰店市| 广德县| 南阳市| 襄樊市| 会同县| 灵川县| 北京市| 郯城县| 新营市| 石林| 贵南县| 炉霍县| 扶沟县| 安庆市| 桦川县| 孟连| 韶山市|