Spring 有可能成為所有企業(yè)應用程序的一站式服務(wù)點,然而,Spring 是模塊化的,允許你挑選和選擇適用于你的模塊,不必要把剩余部分也引入。下面的部分對在 Spring 框架中所有可用的模塊給出了詳細的介紹。
Spring 框架提供約 20 個模塊,可以根據(jù)應用程序的要求來使用。
核心容器由 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)等。
它們的完整依賴關(guān)系如下圖所示:
數(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ù)庫供應商特定錯誤代碼的解析。
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 模塊。
Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節(jié)如下:
Web 模塊提供面向 web 的基本功能和面向 web 的應用上下文,比如多部分(multipart)文件上傳功能、使用 Servlet 監(jiān)聽器初始化 IoC 容器等。它還包括 HTTP 客戶端以及 Spring 遠程調(diào)用中與 web 相關(guān)的部分。
Web-MVC 模塊為 web 應用提供了模型視圖控制(MVC)和 REST Web服務(wù)的實現(xiàn)。Spring 的 MVC 框架可以使領(lǐng)域模型代碼和 web 表單完全地分離,且可以與 Spring 框架的其它所有功能進行集成。
Web-Socket 模塊為 WebSocket-based 提供了支持,而且在 web 應用程序中提供了客戶端和服務(wù)器端之間通信的兩種方式。
Test 模塊:Spring 支持 Junit 和 TestNG 測試框架,而且還額外提供了一些基于 Spring 的測試功能,比如在測試 Web 框架時,模擬 Http 請求的功能。
還有其他一些重要的模塊,像 AOP,Aspects,Instrumentation,Web 和測試模塊,它們的細節(jié)如下:
AOP 模塊提供了面向方面(切面)的編程實現(xiàn),允許你定義方法攔截器和切入點對代碼進行干凈地解耦,從而使實現(xiàn)功能的代碼徹底的解耦出來。使用源碼級的元數(shù)據(jù),可以用類似于.Net屬性的方式合并行為信息到代碼中。
Aspects 模塊提供了與 AspectJ 的集成,這是一個功能強大且成熟的面向切面編程(AOP)框架。
Instrumentation 模塊在一定的應用服務(wù)器中提供了類 instrumentation 的支持和類加載器的實現(xiàn)。
Messaging 模塊為 STOMP 提供了支持作為在應用程序中 WebSocket 子協(xié)議的使用。它也支持一個注解編程模型,它是為了選路和處理來自 WebSocket 客戶端的 STOMP 信息。
更多建議: