核心容器(Core Container)
Core和Beans模塊提供了Spring最基礎的功能,提供IOC和依賴注入特性。這里的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程序性單例模式的需要,並真正地允許你從程序邏輯中分離出依賴關系和配置。
Context模塊基於Core和Bean來構建,它提供了用一種框架風格地方式來訪問對象,有些像JNDI注冊表。Context封裝包繼承了beans包的功能,還增加了國際化(I18N),事件傳播,資源裝載,以及透明創建上下文,例如通過servlet容器,以及對大量JavaEE特性的支持,如EJB,JMX.核心接口是ApplicationContext.
Expression Language,表達式語言模塊,提供了在運行期間查詢和操作對象圖的強大能力。支持訪問和修改屬性值,方法調用,支持訪問及修改數組、容器和索引器,命名變量,支持算數和邏輯運算,支持從spring容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。
數據訪問/集成部分(Data Access/Integration)
JDBC模塊,提供對JDBC的抽象,它可消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼。
ORM模塊,提供了常用的“對象/關系”映射API的集成層。其中包括JPA、JDO、Hibernate和iBatis.利用ORM封裝包,可以混合使用所有Spring提供的特性進行“對象/關系”映射,如簡單聲明式事務管理。
OXM模塊,提供一個支持Object和XML進行映射的抽象層。其中包括JAXB、Castor、XMLBeans、JiBX和XStream.
JMS模塊,提供一套“消息生產者、消費者”模板用於更加簡單的使用JMS,JMS用於在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。
Transaction模塊,支持程序通過簡單聲明式事務管理,只要是Spring管理對象都能得到Spring管理事務的好處,即使是POJO,也可以為他們提供事務。
web
web-socket模塊,websocket protocol是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通信,spring支持websocket通信。
web模塊,提供了基礎的web功能。例如多文件上傳、集成IOC容器、遠程過程訪問以及對webservice支持,並提供一個RestTemplate類來提供方便的Restful services訪問。
web-servlet模塊,提供了web應用的model-view-controller(MVC)實現。spring mvc框架提供了基於注解的請求資源注入、更簡單的數據綁定、數據驗證等及一套非常易用的JSP標簽,完全無縫與spring其他技術協作。
web-portlet模塊,提供了在portlet環境下的mvc實現。
AOP
aop模塊,提供了符合aop聯盟規范的面向切面的編程實現,讓你可以定義如方法攔截器和切入點,從邏輯上講,可以減弱代碼的功能耦合,清晰地被分離開。而且,利用源碼級地元數據功能,還可以將各種行為信息合並到你的代碼中。
aspects模塊,提供了對AspectJ的集成。
Instrumentation模塊,提供一些類級的工具支持和ClassLoader級的實現,可以在一些特定的應用服務器中使用。
Test
spring官網給出了一張spring3的結構圖
圖中將spring分為5個部分:core、aop、data access、web、test,圖中每個圓角矩形都對應一個jar,如果在maven中配置,所有這些jar的“groupId”都是“org.springframework”,每個jar有一個不同的“artifactId”,另外,“instrumentation”有兩個jar,還有一個“spring-context-support”圖中沒有列出,所以spring3的jar包一共是19個
下面介紹這5個部分的jar以及依賴關系
core
core部分包含4個模塊
-
spring-core:依賴注入IoC與DI的最基本實現
-
spring-beans:Bean工廠與bean的裝配
-
spring-context:spring的context上下文即IoC容器
-
spring-expression:spring表達式語言
它們的完整依賴關系
因為spring-core依賴了commons-logging,而其他模塊都依賴了spring-core,所以整個spring框架都依賴了commons-logging,如果有自己的日志實現如log4j,可以排除對commons-logging的依賴,沒有日志實現而排除了commons-logging依賴,編譯報錯
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-context</artifactId>
-
<version>3.2.17.RELEASE</version>
-
<exclusions>
-
<exclusion>
-
<groupId>commons-logging</groupId>
-
<artifactId>commons-logging</artifactId>
-
</exclusion>
-
</exclusions>
-
</dependency>
aop
aop部分包含4個模塊
-
spring-aop:面向切面編程
-
spring-aspects:集成AspectJ
-
spring-instrument:提供一些類級的工具支持和ClassLoader級的實現,用於服務器
-
spring-instrument-tomcat:針對tomcat的instrument實現
它們的依賴關系
data access
data access部分包含5個模塊
-
spring-jdbc:jdbc的支持
-
spring-tx:事務控制
-
spring-orm:對象關系映射,集成orm框架
-
spring-oxm:對象xml映射
-
spring-jms:java消息服務
它們的依賴關系
web
web部分包含4個模塊
-
spring-web:基礎web功能,如文件上傳
-
spring-webmvc:mvc實現
-
spring-webmvc-portlet:基於portlet的mvc實現
-
spring-struts:與struts的集成,不推薦,spring4不再提供
它們的依賴關系
test
test部分只有一個模塊,我將spring-context-support也放在這吧
-
spring-test:spring測試,提供junit與mock測試功能
-
spring-context-support:spring額外支持包,比如郵件服務、視圖解析等
它們的依賴關系
到這里spring3的結構就介紹完了,看着這些圖我相信你在maven中配置spring依賴時不會再混亂了,spring與spring mvc中集成其他技術的詳細配置可以參考我這邊文章spring與spring mvc集成多種技術構建復雜工程
下面介紹spring4的結構,spring4與spring3基本相同,下面是官網給出的結構圖
可以看到,圖中去掉了spring3的struts,添加了messaging和websocket,其他模塊保持不變,因此,spring4的jar有20個
-
spring-websocket:為web應用提供的高效通信工具
-
spring-messaging:用於構建基於消息的應用程序
它們的依賴關系
test