【Spring環(huán)境搭建及簡介】

1.Spring框架簡介

Spring為JavaEE開發(fā)提供了一個輕量級的解決方案恕出,主要表現(xiàn)為:

? ? ?(1)IOC(DI)又稱控制翻轉(zhuǎn)或依賴注入的核心機制,提供你了bean工廠(Spring容器),降低了對業(yè)務(wù)對象替 ????????換的復(fù)雜性唆姐,提高了組件之間的解耦。

? ? ?(2)AOP的將一些通用任務(wù),如安全彪薛、事務(wù)、日志等集中進行管理怠蹂,提高復(fù)用性和管理的便捷性善延。

? ? ?(3)ORM和DAO提供了與第三方持久層框架的良好整合,簡化了底層數(shù)據(jù)訪問城侧。

? ? ?(4)提供了優(yōu)秀的Web MVC框架易遣。

可以說Spring是貫穿表現(xiàn)層、業(yè)務(wù)層嫌佑、持久層豆茫,為JavaEE提供了一站式解決方案的框架。此外屋摇,Spring還有以下好處:

? ? (1)低侵入設(shè)計揩魂,代碼污染極低。

? ? (2)基于Spring框架的應(yīng)用炮温,可以獨立于各種應(yīng)用服務(wù)器火脉,實現(xiàn) write once, run anywhere,

? ? (3)Spring可以與第三方框架良好整合(如ORM,DAO等模塊與其他框架整合),但同時Spring提供了高度開放性柒啤,應(yīng)用不會被強制依賴Spring忘分,開發(fā)者可以自由選擇Spring的部分或者全部。

Spring并不局限于中間層白修,而是為系統(tǒng)各層都提供了企業(yè)級解決方案(例如IOC可以使用Spring框架可以帶來諸多好處妒峦,例如進行數(shù)據(jù)庫事務(wù)處理,遠程調(diào)用兵睛,JMS消息處理肯骇,JMX操作處理,而這些處理都不需要開發(fā)人員直接使用相關(guān)API(JDBC祖很, JMX, JMS 等)

2.Sping架構(gòu)

Spring框架是分模塊存在笛丙,除了最核心的Spring Core Container(即Spring容器)是必要模塊之外,其他模塊都是可選假颇,視需要而定胚鸯。

官方文檔Spring4.0的架構(gòu)圖中,包含了20多個子模塊笨鸡,大致可以分為四類?

1)核心容器(Core Container)?

2)數(shù)據(jù)訪問和集成(Data Access/Integration)?

3)Web?

4)AOP姜钳。

本質(zhì)上Spring可以總結(jié)為以下七個模塊坦冠。


Spring框架的7個模塊

其中常用模塊的大致功能如下。

核心容器:核心容器提供 Spring 框架的基本功能哥桥。核心容器的主要組件是?BeanFactory辙浑,它是工廠模式的實現(xiàn)。BeanFactory?使用控制反轉(zhuǎn)?(IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開拟糕。

Spring 上下文:Spring 上下文是一個配置文件判呕,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù)送滞,例如 JNDI侠草、EJB、電子郵件犁嗅、國際化边涕、校驗和調(diào)度功能。

Spring AOP:通過配置管理特性愧哟,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中奥吩『咔可以將一些通用任務(wù)蕊梧,如安全、事務(wù)腮介、日志等集中進行管理肥矢,提高了復(fù)用性和管理的便捷性。

Spring DAO:為JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu)叠洗,可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息甘改。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)灭抑。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)十艾。

Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關(guān)系工具腾节,其中包括 JDO忘嫉、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)案腺。

Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上庆冕,為基于 Web 的應(yīng)用程序提供了上下文。所以劈榨,Spring 框架支持與 Jakarta Struts 的集成访递。Web 模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

Spring MVC 框架:MVC 框架是一個全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實現(xiàn)。通過策略接口同辣,MVC 框架變成為高度可配置的拷姿,MVC 容納了大量視圖技術(shù)惭载,其中包括 JSP、Velocity跌前、Tiles棕兼、iText 和 POI。

?3.環(huán)境搭建(Spring的版本要和eclipse版本對應(yīng))

首先需要下載Spring框架?spring-framework-4.0.4.RELEASE-dist抵乓,4.0.4版官方地址為?http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.4.RELEASE/ (如果覺得太慢也可以去國內(nèi)網(wǎng)站下載)

此外伴挚,還需要下載一個必要組件commons-logging-1.1.3-bin?,可以在http://commons.apache.org/官網(wǎng)下載也可以在國內(nèi)網(wǎng)站下載灾炭。

其他諸如log4j之類的并不是必須下載的茎芋。

下載好以上兩個壓縮包。在workspace下新建一個lib目錄作為user library蜈出。將Spring壓縮包解壓之后田弥,將libs目錄下的 *RELEASE.jar(共21個)都拷貝到你的workspace下的lib目錄;將commons包也解壓铡原,將根目錄的*.1.3.jar(共3個)都拷貝到lib目錄下偷厦。



4.簡單demo及控制反轉(zhuǎn)(IOC)和依賴注入(DI)簡介

J2EE提倡面向接口編程,Spring也是針對的接口編程燕刻,即在代碼中只使用規(guī)范(即接口)只泼,而將真正的實現(xiàn)類配置在文件中,由Spring的配置文件來決定將會使用哪一個實現(xiàn)類,這也叫做控制反轉(zhuǎn)(IOC)或者依賴注入(DI)。

現(xiàn)在我們假設(shè)有這么一個場景炮叶, 我們指定一類人去使用一類斧頭乡括,不同的人可以使用不同的斧頭,當(dāng)然其效果不一樣。

按照J2EE的建議,首先我們需要定義“人”和“斧頭”兩個規(guī)范,即創(chuàng)建兩個接口

斧頭接口:


斧頭接口的一個實現(xiàn):


人接口:


人接口的一個實現(xiàn):


下面要寫一個測試類本橙,使用Person接口的一個實現(xiàn)類的對象,去調(diào)用Axe的一個實現(xiàn)類的對象脆诉,

按照傳統(tǒng)編程方式甚亭,我們一般會寫成下面這樣,


重點是第10行和11行库说,即PerssonImpl類和AxeImpl類耦合在了java代碼中狂鞋,如果現(xiàn)在需求有變,我們在這里要使用一種新的斧頭潜的,即Axe有一個新的實現(xiàn)類SteelAxe骚揍,那么就必須修改這里的代碼,SteelAxe axe = new SteelAxe();這對于代碼維護其實并不方便。對于這個問題信不,Spring的解決方案是將上面的步驟放在了配置文件中年嘲叔,具體做法如下:

首先創(chuàng)建一個配置文件bean.xml? :


有了這個配置文件之后,Spring就可以在底層利用java反射抽活,首先創(chuàng)建出兩個類對象(PersonImpl和AxeImpl)硫戈,接著馬上執(zhí)行對象的setter方法,依據(jù)配置文件中各個類的依賴關(guān)系去初始化每個對象的屬性下硕,而這個過程丁逝,正是上面?zhèn)鹘y(tǒng)編程中的AxeImplaxe = new AxeImpl();

p.setAxe(axe);這兩步!

下面看看Spring方式在測試代碼中的寫法梭姓,


執(zhí)行結(jié)果:


可以看到霜幼,在測試代碼中,完全沒有了PersonImpl和AxeImpl兩個類的耦合依賴關(guān)系誉尖,轉(zhuǎn)而將依賴關(guān)系放在了上面的XML文件中罪既,底層通過java反射的方式進行初始化。

即铡恕,將java代碼中對象間的依賴關(guān)系的控制權(quán)交給了Spring配置文件琢感,由Spring來生成對象,并且設(shè)置對象間的依賴關(guān)系探熔,這就是控制反轉(zhuǎn)(IOC)或者叫依賴注入(DI)驹针。

Spring自動生成對象(可禁用)和設(shè)置依賴關(guān)系是最基本的功能。

Spring的IOC(或DI)機制祭刚,極大地降低了組件間的耦合牌捷,例如對于上面的需求變更墙牌,我們只需要在XML文件中新增一個bean節(jié)點涡驮,并設(shè)置好依賴關(guān)系即可,而測試代碼不需要任何改變喜滨!

新增Axe的實現(xiàn)類:


修改bean.xml配置文件:


執(zhí)行測試類結(jié)果:


5.設(shè)值注入(set)和構(gòu)造注入(constructor)

對于依賴注入捉捅,有兩種方式,一種是設(shè)置注入虽风,即上面XML配置文件中設(shè)置<property />標(biāo)簽的方式棒口,這種方法本質(zhì)上是利用反射調(diào)用對象的setter方式進行初始化。

另外辜膝,還可以使用構(gòu)造注入的方式无牵,即在XML配置文件中使用<constructor-arg />標(biāo)簽,不過這種方式要求有對應(yīng)的構(gòu)造方法才行厂抖。

對于上面的例子茎毁,首先我們要讓PersonImpl類有一個構(gòu)造方法,

接著我們將XML配置文件中的<peroperty>標(biāo)簽用<constructor-arg>標(biāo)簽替換,

我們將得到一樣的結(jié)果七蜘,只是實現(xiàn)的方式不一樣而已谭溉。對于設(shè)值注入和構(gòu)造注入兩種方式如何選擇呢?

一般的情況下橡卤,如果對依賴關(guān)系無需變化地注入扮念,盡量采用構(gòu)造注入。其他依賴關(guān)系的注入則考慮采用設(shè)值方式注入碧库。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柜与,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嵌灰,更是在濱河造成了極大的恐慌旅挤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伞鲫,死亡現(xiàn)場離奇詭異粘茄,居然都是意外死亡,警方通過查閱死者的電腦和手機秕脓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門柒瓣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吠架,你說我怎么就攤上這事芙贫。” “怎么了傍药?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵磺平,是天一觀的道長。 經(jīng)常有香客問我拐辽,道長拣挪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任俱诸,我火速辦了婚禮菠劝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睁搭。我一直安慰自己赶诊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布园骆。 她就那樣靜靜地躺著舔痪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锌唾。 梳的紋絲不亂的頭發(fā)上锄码,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音,去河邊找鬼巍耗。 笑死秋麸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炬太。 我是一名探鬼主播灸蟆,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亲族!你這毒婦竟也來了炒考?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤霎迫,失蹤者是張志新(化名)和其女友劉穎斋枢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體知给,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡瓤帚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涩赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戈次。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筒扒,靈堂內(nèi)的尸體忽然破棺而出怯邪,到底是詐尸還是另有隱情,我是刑警寧澤花墩,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布悬秉,位于F島的核電站,受9級特大地震影響冰蘑,放射性物質(zhì)發(fā)生泄漏和泌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一懂缕、第九天 我趴在偏房一處隱蔽的房頂上張望允跑。 院中可真熱鬧王凑,春花似錦搪柑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至百姓,卻和暖如春渊额,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工旬迹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留火惊,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓奔垦,卻偏偏與公主長得像屹耐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子椿猎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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