11--Spring框架簡介

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)蚂夕,消息傳輸和測試迅诬,如下面的圖所示。

2018090414412415.png
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的官方文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末近刘,一起剝皮案震驚了整個濱河市介劫,隨后出現(xiàn)的幾起案子案淋,更是在濱河造成了極大的恐慌踢京,老刑警劉巖瓣距,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件成黄,死亡現(xiàn)場離奇詭異逻杖,居然都是意外死亡荸百,警方通過查閱死者的電腦和手機管搪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霎箍,“玉大人漂坏,你說我怎么就攤上這事顶别⊙币铮” “怎么了剩失?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵拴孤,是天一觀的道長演熟。 經(jīng)常有香客問我,道長兄纺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮疙教,結(jié)果婚禮上伞租,老公的妹妹穿的比我還像新娘葵诈。我一直安慰自己,他們只是感情好理疙,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布砖顷。 她就那樣靜靜地躺著赃梧,像睡著了一般授嘀。 火紅的嫁衣襯著肌膚如雪蹄皱。 梳的紋絲不亂的頭發(fā)上夯接,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天盔几,我揣著相機與錄音逊拍,去河邊找鬼芯丧。 笑死缨恒,一個胖子當著我的面吹牛骗露,可吹牛的內(nèi)容都是我干的萧锉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衩辟!你這毒婦竟也來了惭婿?” 一聲冷哼從身側(cè)響起财饥,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钥星,失蹤者是張志新(化名)和其女友劉穎谦炒,沒想到半個月后宁改,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體还蹲,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谜喊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年斗遏,在試婚紗的時候發(fā)現(xiàn)自己被綠了诵次。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逾一。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嬉荆,死狀恐怖鄙早,靈堂內(nèi)的尸體忽然破棺而出限番,到底是詐尸還是另有隱情弥虐,我是刑警寧澤霜瘪,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布颖对,位于F島的核電站缤底,受9級特大地震影響个唧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犁河,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一呼股、第九天 我趴在偏房一處隱蔽的房頂上張望画恰。 院中可真熱鬧允扇,春花似錦考润、人聲如沸糊治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窃肠。三九已至冤留,卻和暖如春纤怒,著一層夾襖步出監(jiān)牢的瞬間糯而,已是汗流浹背歧蒋。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吴叶,地道東北人蚌卤。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓逊彭,卻偏偏與公主長得像侮叮,于是被迫代替她去往敵國和親囊榜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)碍庵,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架马绝,建立于...
    Hsinwong閱讀 22,403評論 1 92
  • 欣賞自己:用心對我團隊的每位代理。不斷擴大自己格局白胀,提升自己或杠,把總結(jié)出的精華分享給我的代理們。幫助他們成長认境,挖掘她...
    芊潤閱讀 150評論 0 0
  • 騰訊微信公眾平臺的宣傳語是叉信,再小的個體也有自己的品牌艘希。 我的理解是覆享,你可以為自己代言佳遂,你的名字就是一個品牌丑罪。當人們...
    努力攢錢的二花閱讀 383評論 0 2