翻譯自Spring官方文檔 4.1.2版本
一、Spring Framework構(gòu)成##
Spring Framework根據(jù)功能不同大約可以分為20個(gè)模塊。這些模塊又可以分組為:核心容器(Core Container), 數(shù)據(jù)訪問(wèn)/集成(Data Access/Integration),網(wǎng)絡(luò)(Web), 面向切面編程(Aspect Oriented Programming), 工具(Instrumentation), 消息(Messaging), and 測(cè)試(Test)。

1.1 核心容器###
核心容器包含:spring-core, spring-beans, spring-context, 和spring-expression (Spring Expression Language)模塊。
spring-core和spring-beans模塊提供框架的基本組成部分,包括IoC 和Dependency Injection特性。BeanFactory是一個(gè)復(fù)雜的工廠模式的實(shí)現(xiàn)。它不需要你手動(dòng)編碼來(lái)實(shí)現(xiàn)單例并且允許你在實(shí)際的編程中將配置和對(duì)象間的依賴解耦。
spring-context模塊構(gòu)建在spring-core和spring-beans模塊的基礎(chǔ)上:通過(guò)框架在存取對(duì)象的方式上是和JNDI注冊(cè)類似的。Context模塊繼承Beans模塊的特點(diǎn)并添加國(guó)際化支持(例如:resource bundles)、事件傳播、資源加載、上下文的透明創(chuàng)建,例如:一個(gè)Servlet容器。Context模塊同樣也支持Java EE特性例如EJB,、JMX和基本的遠(yuǎn)程調(diào)用。ApplicationContext接口是Context模塊的中心點(diǎn)。
spring-expression模塊提供強(qiáng)大的表達(dá)式語(yǔ)言在運(yùn)行時(shí)用來(lái)查詢和操作對(duì)象圖。它是在JSP 2.1規(guī)范中指定的unified expression language (unified EL)的擴(kuò)展。這個(gè)語(yǔ)言支持設(shè)置和獲取屬性值,屬性賦值,方法調(diào)用,訪問(wèn)數(shù)組、集合、索引,邏輯和算數(shù)運(yùn)算,命名變量,根據(jù)名稱從Spring的IoC容器取回對(duì)象。它還支持列表映射和選取就像普通的列表集合一樣。
1.2 AOP和工具###
spring-aop模塊提供一個(gè)AOP 行業(yè)兼容的面向切面的編程實(shí)現(xiàn)允許你定義以下幾個(gè)操作:例如定義方法攔截器、定義切點(diǎn)來(lái)清晰的分離功能不同的代碼。通過(guò)使用源碼級(jí)元數(shù)據(jù)的功能,你可以將行為信息融入在你的代碼(記錄日志這個(gè)最容易想到)。
獨(dú)立的spring-aspects模塊集成了AspectJ。
spring-instrument模塊提供了類工具支持和類加載器實(shí)現(xiàn),被用于一些應(yīng)用程序服務(wù)器中。
1.3 消息###
Spring Framework 4包括了一個(gè)spring-messaging模塊,它具有一些主要的抽象例如:Message、MessageChannel、MessageHandler和其他一些抽象一起充當(dāng)基于消息的應(yīng)用程序的基礎(chǔ)。這個(gè)模塊也包含了一組注解來(lái)映射消息到方法,類似于Spring MVC基于注解的編程方式。
1.4 數(shù)據(jù)訪問(wèn)/集成###
數(shù)據(jù)訪問(wèn)/集成層包括JDBC, ORM, OXM, JMS, 和Transaction等模塊。
spring-jdbc模塊提供一個(gè)JDBC抽象層,消除了冗長(zhǎng)的JDBC編碼并且解析了數(shù)據(jù)庫(kù)廠商特定的錯(cuò)誤代碼。
對(duì)于那些實(shí)現(xiàn)了特殊接口和你的POJO類,spring-tx模塊提供了編程式和聲明式事務(wù)管理。
spring-orm模塊為流行的對(duì)象關(guān)系映射APIs提供了集成,包括:JPA, JDO, 和Hibernate。如果使用spring-orm模塊你可以使用這些O/R-mapping框架同時(shí)結(jié)合使用Spring提供的所有其他特性。例如:之前說(shuō)到的聲明式事務(wù)管理特性。
spring-oxm模塊提供了一個(gè)抽象層來(lái)支持Object/XML mapping的實(shí)現(xiàn),例如:JAXB, Castor, XMLBeans, JiBX 和XStream。
spring-jms模塊包含了生產(chǎn)和消費(fèi)信息的特性。從Spring Framework 4.1以后,它提供了與spring-messaging模塊集成。
1.5 網(wǎng)絡(luò)###
網(wǎng)絡(luò)層包括spring-web, spring-webmvc, spring-websocket,和spring-webmvc-portlet模塊。
spring-web模塊提供了基本的面向網(wǎng)絡(luò)的集成特性,例如:文件上傳功能、初始化IoC容器可以使用Servlet監(jiān)聽器和一個(gè)面向網(wǎng)絡(luò)的應(yīng)用程序上下文。它也包含了Spring遠(yuǎn)程調(diào)用支持的網(wǎng)絡(luò)相關(guān)的部分。
spring-webmvc模塊(也被叫做Web-Servlet模塊)包含了為web應(yīng)用程序設(shè)計(jì)的Spring的model-view-controller (MVC)實(shí)現(xiàn)。Spring的MVC框架在域模型(domain model)代碼和web表單之間提供了一個(gè)清晰的劃分,并且與Spring Framework的所有其他特性集成。
spring-webmvc-portlet模塊(也被叫做Web-Portlet模塊)提供了MVC實(shí)現(xiàn)用來(lái)在門戶環(huán)境(Portlet environment )中使用,借鑒了spring-webmvc的功能。
1.6 測(cè)試###
spring-test模塊通過(guò)JUnit 或者 TestNG為Spring組件進(jìn)行單元測(cè)試和集成測(cè)試提供了支持。它提供了ApplicationContexts和那些上下文緩存的一致性加載。它也提供了模擬對(duì)象(mock objects)使你可以去測(cè)試你的代碼在隔離的狀態(tài)。
二、典型的完全成熟的Spring web application##

Spring的聲明式事務(wù)管理特性使web應(yīng)用程序完全是事務(wù)性的,就像你使用EJB管理事務(wù)那樣。你的所有自定義業(yè)務(wù)邏輯可以被實(shí)現(xiàn)為簡(jiǎn)單的POJO(其實(shí)我對(duì)POJO還挺模糊)并且被Spring的 IoC 容器管理。額外的服務(wù)包括發(fā)送郵件并且驗(yàn)證是獨(dú)立與web層的,這樣允許你選擇在哪里執(zhí)行驗(yàn)證規(guī)則。Spring的ORM支持已經(jīng)與JPA, Hibernate 和 JDO集成;例如,當(dāng)使用Hibernate時(shí),你可以繼續(xù)使用你已有的映射文件和標(biāo)準(zhǔn)的Hibernate SessionFactory配置。表單控制器(Form controller)通過(guò)域模型(domain model)無(wú)縫的與web層集成,不再需要
ActionForms或者其他類來(lái)將HTTP參數(shù)轉(zhuǎn)換成你域模型里的值。