1.框架簡介
Spring 框架是一個Java平臺抵卫,它為開發(fā)Java應用程序提供全面的基礎(chǔ)架構(gòu)支持狮荔。Spring負責基礎(chǔ)架構(gòu),因此您可以專注于應用程序的開發(fā)介粘。Spring可以讓您從“plain old Java objects”(POJO)中構(gòu)建應用程序和通過非侵入性的POJO實現(xiàn)企業(yè)應用服務。此功能適用于Java SE的編程模型晚树,全部的或部分的適應Java EE模型姻采。
這些例子告訴你,作為一個應用程序開發(fā)人員爵憎,如何從Spring平臺中受益:
- 寫一個Java方法執(zhí)行數(shù)據(jù)庫事務慨亲,而無需處理具體事務的APIs。
- 寫一個本地Java方法去遠程調(diào)用宝鼓,而不必處理遠程調(diào)用的APIs刑棵。
- 寫一個本地Java方法實現(xiàn)管理操作,而不必處理JMX APIs愚铡。
- 寫一個本地Java方法實現(xiàn)消息處理,而不必處理JMS APIs沥寥。
2.依賴注入和控制反轉(zhuǎn)
Java應用程序-這是一個寬松的術(shù)語碍舍,它包括的范圍從受限的嵌入式應用程序到n層的服務器端企業(yè)應用程序-通常組成程序的對象互相協(xié)作而構(gòu)成正確的應用程序邑雅。因此,在一個應用程序中的對象彼此具有依賴關(guān)系(dependencies)淮野。
雖然Java平臺提供了豐富的應用程序開發(fā)功能捧书,但它缺乏將基本的模塊組織成一個整體的方法骤星,而將該任務留給了架構(gòu)師和開發(fā)人員。雖然你可以使用如工廠妈踊,抽象工廠了嚎,Builder,裝飾器和Service Locator等 設(shè)計模式來構(gòu)建各種類和對象實例歪泳,使他們組合成應用程序萝勤,但這些模式無非只是:最佳實踐賦予的一個名字,以及這是什么樣的模式呐伞,應用于哪里敌卓,它能解決的問題等等。 模式是您必須在應用程序中自己實現(xiàn)的形式化的最佳實踐伶氢。
Spring框架控制反轉(zhuǎn)(IOC)組件通過提供一系列的標準化的方法把完全不同的組件組合成一個能夠使用的應用程序來解決這個問題趟径。Spring框架把形式化的設(shè)計模式編寫為優(yōu)秀的對象,你可以容易的集成到自己的應用程序中癣防。許多組織和機構(gòu)使用Spring框架蜗巧,以這種方式(使用Spring的模式對象)來設(shè)計健壯的,可維護的應用程序蕾盯。
背景
“ 現(xiàn)在的問題是幕屹,什么方面的控制被(他們)反轉(zhuǎn)了? ”馬丁·福勒2004年在他的網(wǎng)站提出了這個有關(guān)控制反轉(zhuǎn)(IOC)的問題 级遭,福勒建議重命名望拖,使之能夠自我描述,并提出了依賴注入( Dependency njection)挫鸽。
3.模塊
Spring框架的功能被有組織的分散到約20個模塊中说敏。這些模塊分布在核心容器,數(shù)據(jù)訪問/集成丢郊,Web盔沫,AOP(面向切面的編程),植入(Instrumentation)蚂夕,消息傳輸和測試迅诬,如下面的圖所示。
3.核心容器
核心容器由以下模塊組成婿牍,spring-core侈贷, spring-beans,spring-context等脂,springcontext-support俏蛮,和spring-expression(Spring表達式語言)。
spring-core和spring-beans模塊提供了框架的基礎(chǔ)功能上遥,包括IOC和依賴注入功能搏屑。 BeanFactory是一個成熟的工廠模式的實現(xiàn)。你不再需要編程去實現(xiàn)單例模式粉楚,允許你把依賴關(guān)系的配置和描述從程序邏輯中解耦辣恋。
上下文(spring-context)模塊建立在由Core和Beans模塊提供的堅實的基礎(chǔ)上:它提供一個框架式的對象訪問方式亮垫,類似于一個JNDI注冊表。上下文模塊從Beans模塊繼承其功能伟骨,并添加支持國際化(使用饮潦,例如,資源集合)携狭,事件傳播继蜡,資源負載,并且透明創(chuàng)建上下文逛腿,例如稀并,Servlet容器。Context模塊還支持Java EE的功能单默,如EJB碘举,JMX和基本的遠程處理。ApplicationContext接口是Context模塊的焦點雕凹。spring-context-support支持整合普通第三方庫到Spring應用程序上下文殴俱,特別是用于高速緩存ehcache,Cache)和調(diào)度(CommonJ,Quartz)的支持明场。
spring-expression模塊提供了強大的表達式語言去支持查詢和操作運行時對象圖。這是對JSP 2.1規(guī)范中規(guī)定的統(tǒng)一表達式語言(unified EL)的擴展苦锨。該語言支持設(shè)置和獲取屬性值,屬性分配舟舒,方法調(diào)用,訪問數(shù)組秃励,集合和索引器的內(nèi)容,邏輯和算術(shù)運算皆尔,變量命名以及從Spring的IoC容器中以名稱檢索對象。 它還支持列表投影和選擇以及常見的列表聚合慷蠕。
4. AOP和Instrumentation
spring-aop模塊提供了一個符合AOP聯(lián)盟(要求)的面向方面的編程實現(xiàn)食呻,例如澎现,允許您定義方法攔截器和切入點(pointcuts)每辟,以便干凈地解耦應該被分離的功能實現(xiàn)。 使用源級元數(shù)據(jù)(source-level metadata)功能影兽,您還可以以類似于.NET屬性的方式將行為信息合并到代碼中。
單獨的spring-aspects模塊讹开,提供了與AspectJ的集成。
spring-instrument模塊提供了類植入(instrumentation)支持和類加載器的實現(xiàn),可以應用在特定的應用服務器中旦万。該spring-instrument-tomcat 模塊包含了支持Tomcat的植入代理镶蹋。
5. 消息
Spring框架4包括spring-messaging(消息傳遞模塊),其中包含來自SpringIntegration的項目贺归,例如,Message秋冰,MessageChannel,MessageHandler剑勾,和其他用來傳輸消息的基礎(chǔ)應用赵颅。該模塊還包括一組用于將消息映射到方法的注釋(annotations),類似于基于Spring MVC注釋的編程模型捂刺。
6.數(shù)據(jù)訪問/集成
數(shù)據(jù)訪問/集成層由JDBC叠萍,ORM绪商,OXM,JMS和事務模塊組成腹殿。spring-jdbc模塊提供了一個JDBC –抽象層独悴,消除了需要的繁瑣的JDBC編碼和數(shù)據(jù)庫廠商特有的錯誤代碼解析刻炒。
spring-tx模塊支持用于實現(xiàn)特殊接口和所有POJO(普通Java對象)的類的編程和聲明式事務 管理。
spring-orm模塊為流行的對象關(guān)系映射(object-relational mapping )API提供集成層坟奥,包括JPA和Hibernate拇厢。使用spring-orm模塊,您可以將這些O / R映射框架與Spring提供的所有其他功能結(jié)合使用孝偎,例如前面提到的簡單聲明性事務管理功能。spring-oxm模塊提供了一個支持對象/ XML映射實現(xiàn)的抽象層衣盾,如JAXB,Castor阻塑,JiBX和XStream果复。
spring-jms模塊(Java Messaging Service) 包含用于生產(chǎn)和消費消息的功能据悔。自Spring Framework 4.1以來极颓,它提供了與 spring-messaging模塊的集成群嗤。
7.Web
Web層由spring-web狂秘,spring-webmvc和spring-websocket 模塊組成。
spring-web模塊提供基本的面向Web的集成功能者春,例如多部分文件上傳功能,以及初始化一個使用了Servlet偵聽器和面向Web的應用程序上下文的IoC容器晰筛。它還包含一個HTTP客戶端和Spring的遠程支持的Web相關(guān)部分。
spring-webmvc模塊(也稱為Web-Servlet模塊)包含用于Web應用程序的Spring的模型-視圖-控制器(MVC)和REST Web Services實現(xiàn)。 Spring的MVC框架提供了領(lǐng)域模型代碼和Web表單之間的清晰分離怜瞒,并與Spring Framework的所有其他功能集成。
8.測試
spring-test模塊支持使用JUnit或TestNG對Spring組件進行單元測試和 集成測試吴汪。它提供了Spring ApplicationContexts的一致加載和這些上下文的緩存。它還提供可用于獨立測試代碼的模仿(mock)對象睬捶。
附: Spring5的官方文檔