一爪模、體系結(jié)構(gòu)
Spring 有可能成為所有企業(yè)應(yīng)用程序的一站式服務(wù)點沃琅,然而,Spring 是模塊化的究抓,允許你挑選和選擇適用于你的模塊猾担,不必要把剩余部分也引入。下面的部分對在 Spring 框架中所有可用的模塊給出了詳細的介紹刺下。
Spring 框架提供約 20 個模塊绑嘹,可以根據(jù)應(yīng)用程序的要求來使用。
二怠李、核心容器
核心容器由spring-core圾叼,spring-beans蛤克,spring-context捺癞,spring-context-support和spring-expression(SpEL,Spring表達式語言构挤,Spring Expression Language)等模塊組成髓介,它們的細節(jié)如下:
spring-core模塊提供了框架的基本組成部分,包括 IoC 和依賴注入功能筋现。
spring-beans模塊提供 BeanFactory唐础,工廠模式的微妙實現(xiàn),它移除了編碼式單例的需要矾飞,并且可以把配置和依賴從實際編碼邏輯中解耦一膨。
context模塊建立在由core和beans模塊的基礎(chǔ)上建立起來的,它以一種類似于JNDI注冊的方式訪問對象洒沦。Context模塊繼承自Bean模塊豹绪,并且添加了國際化(比如,使用資源束)申眼、事件傳播瞒津、資源加載和透明地創(chuàng)建上下文(比如蝉衣,通過Servelet容器)等功能。Context模塊也支持Java EE的功能巷蚪,比如EJB病毡、JMX和遠程調(diào)用等。ApplicationContext接口是Context模塊的焦點屁柏。spring-context-support提供了對第三方庫集成到Spring上下文的支持啦膜,比如緩存(EhCache, Guava, JCache)、郵件(JavaMail)淌喻、調(diào)度(CommonJ, Quartz)功戚、模板引擎(FreeMarker, JasperReports, Velocity)等。
spring-expression模塊提供了強大的表達式語言似嗤,用于在運行時查詢和操作對象圖啸臀。它是JSP2.1規(guī)范中定義的統(tǒng)一表達式語言的擴展,支持set和get屬性值烁落、屬性賦值乘粒、方法調(diào)用、訪問數(shù)組集合及索引的內(nèi)容伤塌、邏輯算術(shù)運算灯萍、命名變量、通過名字從Spring IoC容器檢索對象旦棉,還支持列表的投影、選擇以及聚合等药薯。
它們的完整依賴關(guān)系如下圖所示:
三绑洛、數(shù)據(jù)訪問/集成
數(shù)據(jù)訪問/集成層包括 JDBC童本,ORM真屯,OXM,JMS 和事務(wù)處理模塊配深,它們的細節(jié)如下:
(注:JDBC=Java Data Base Connectivity篓叶,ORM=Object Relational Mapping向叉,OXM=Object XML Mapping母谎,JMS=Java Message Service)
JDBC?模塊提供了JDBC抽象層咬扇,它消除了冗長的JDBC編碼和對數(shù)據(jù)庫供應(yīng)商特定錯誤代碼的解析梭灿。
ORM?模塊提供了對流行的對象關(guān)系映射API的集成,包括JPA溉卓、JDO和Hibernate等皮迟。通過此模塊可以讓這些ORM框架和spring的其它功能整合,比如前面提及的事務(wù)管理桑寨。
OXM?模塊提供了對OXM實現(xiàn)的支持伏尼,比如JAXB、Castor西疤、XML?Beans烦粒、JiBX、XStream等代赁。
JMS?模塊包含生產(chǎn)(produce)和消費(consume)消息的功能。從Spring?4.1開始兽掰,集成了spring-messaging模塊芭碍。。
事務(wù)模塊為實現(xiàn)特殊接口類及所有的 POJO 支持編程式和聲明式事務(wù)管理孽尽。(注:編程式事務(wù)需要自己寫beginTransaction()窖壕、commit()、rollback()等事務(wù)管理方法,聲明式事務(wù)是通過注解或配置由spring自動處理瞻讽,編程式事務(wù)粒度更細)
四鸳吸、Web
Web 層由 Web,Web-MVC速勇,Web-Socket 和 Web-Portlet 組成晌砾,它們的細節(jié)如下:
Web?模塊提供面向web的基本功能和面向web的應(yīng)用上下文,比如多部分(multipart)文件上傳功能烦磁、使用Servlet監(jiān)聽器初始化IoC容器等养匈。它還包括HTTP客戶端以及Spring遠程調(diào)用中與web相關(guān)的部分。都伪。
Web-MVC?模塊為web應(yīng)用提供了模型視圖控制(MVC)和REST?Web服務(wù)的實現(xiàn)呕乎。Spring的MVC框架可以使領(lǐng)域模型代碼和web表單完全地分離,且可以與Spring框架的其它所有功能進行集成陨晶。
Web-Socket?模塊為 WebSocket-based 提供了支持猬仁,而且在 web 應(yīng)用程序中提供了客戶端和服務(wù)器端之間通信的兩種方式。
Web-Portlet?模塊提供了用于Portlet環(huán)境的MVC實現(xiàn)先誉,并反映了spring-webmvc模塊的功能逐虚。
五、其他
還有其他一些重要的模塊谆膳,像?AOP叭爱,Aspects,Instrumentation漱病,Web 和測試模塊买雾,它們的細節(jié)如下:
AOP?模塊提供了面向方面的編程實現(xiàn),允許你定義方法攔截器和切入點對代碼進行干凈地解耦杨帽,從而使實現(xiàn)功能的代碼徹底的解耦出來漓穿。使用源碼級的元數(shù)據(jù),可以用類似于.Net屬性的方式合并行為信息到代碼中注盈。
Aspects?模塊提供了與?AspectJ?的集成晃危,這是一個功能強大且成熟的面向切面編程(AOP)框架。
Instrumentation?模塊在一定的應(yīng)用服務(wù)器中提供了類 instrumentation 的支持和類加載器的實現(xiàn)老客。
Messaging?模塊為 STOMP 提供了支持作為在應(yīng)用程序中 WebSocket 子協(xié)議的使用僚饭。它也支持一個注解編程模型,它是為了選路和處理來自 WebSocket 客戶端的 STOMP 信息胧砰。
測試模塊支持對具有 JUnit 或 TestNG 框架的 Spring 組件的測試鳍鸵。