前言:最近學(xué)習(xí)了Spring框架披粟,就此總結(jié)下心得體會(huì)
一. Spring簡介:
-
什么是Spring咒锻?
Spring是一個(gè)開源的輕量級(jí)、非侵入式的控制反轉(zhuǎn)和面向切面的容器框架守屉。
1)輕量級(jí)(Lightwight):簡而言之就是資源jar包小虫碉,Spring的核心包在文件容量上只有不到1MB的大小,而使用Spring核心包所需要的資源負(fù)擔(dān)也是很小的2)非侵入性(No intrusive):不需要使用框架的API去解決問題胸梆,提高程序的可維護(hù)性敦捧,可擴(kuò)展性。String提供的功能都在配置文件中完IOC成碰镜。Spring的目標(biāo)之一是實(shí)現(xiàn)非侵入性框架兢卵,希望讓應(yīng)用程序幾乎感受不到框架的存在,減低應(yīng)用程序在框架移植時(shí)的負(fù)擔(dān)绪颖,進(jìn)一步增強(qiáng)應(yīng)用程序組件的可重用性秽荤,簡單地說,使用Spring的話柠横,應(yīng)用程序中某些組件可以直接拿到另一個(gè)應(yīng)用程序或框架之中直接使用窃款。
3)容器(Container):Spring提供容器功能,容器可以管理對(duì)象的生命周期牍氛,對(duì)象與對(duì)象之間的依賴關(guān)系晨继,我們可以使用一個(gè)配置文件(通常是XML),在上面定義好對(duì)象的名稱搬俊,如何產(chǎn)生 (Prototype方式或Singleton方式)紊扬,以及那個(gè)對(duì)象產(chǎn)生之后必須設(shè)定成為某個(gè)對(duì)象的屬性等。在啟動(dòng)容器后唉擂,所有的對(duì)象都可以直接取用餐屎,不用編寫任何一行代碼來產(chǎn)生對(duì)象,或是建立對(duì)象與對(duì)象之間的依賴關(guān)系玩祟。
????????換個(gè)更直白點(diǎn)的說明方式:容器是一個(gè)Java所編寫的程序腹缩,原先必須自行編寫程序以管理對(duì)象關(guān)系,現(xiàn)在容器都會(huì)自動(dòng)幫您做好。4)控制反轉(zhuǎn)IOC(Inversion Of Control):其更具體的另一個(gè)名詞是Dependency Injection藏鹊,中文常翻譯為“依賴注入”胜臊。即把程序中類之間的依賴關(guān)系的控制反轉(zhuǎn)給Spring容器來處理。使用Spring伙判,我們不必自己在程序代碼中維護(hù)對(duì)象的依賴關(guān)系象对,只需要在配置文件中加入設(shè)定,Spring核心容器會(huì)自動(dòng)根據(jù)配置將依賴注入指定的對(duì)象宴抚。
*5)面向切面編程\color{red}{AOP}(\color{red}{Aspect-oriented-programming}):Spring最被人重視的另一方面是支持AOP的實(shí)現(xiàn)勒魔,然而AOP框架只是Spring支持的一個(gè)子框架,說Spring框架是AOP框架并不是一個(gè)適當(dāng)?shù)拿枋龉角藗儗?duì)于AOP的關(guān)注反映至Spring上冠绢,使得人們對(duì)于Spring的關(guān)注集中在它的AOP框架上,雖然所有誤解常潮,但也突現(xiàn)了Spring的另一個(gè)令人關(guān)注的特色弟胀。
????????舉個(gè)實(shí)際的栗子來說明AOP的功能之一,假設(shè)我們有個(gè)日志(Logging)的需求喊式,我們可以無須修改任何一行程序代碼孵户,就可以將這個(gè)需求加入至原先的應(yīng)用程序之中,而若我們愿意岔留,也可以在不修改任何程序的情況下夏哭,將這個(gè)日志的功能移除。
????????Spring的IOC容器功能與AOP功能的實(shí)現(xiàn)是其重心所在献联,在Spring下實(shí)現(xiàn)了持久層竖配,MVC Web框架以及各種企業(yè)服務(wù)的API封裝,他們的實(shí)現(xiàn)有些倚重于Spring的IOC容器與AOP功能里逆,Sping的這些框架或封裝的API功能彼此可以獨(dú)立进胯,也可以結(jié)合其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案原押。6)持久層:Spring提供對(duì)持久層的整合胁镐,如對(duì)JDBC的使用加以封裝與簡化,提供事物(Transaction)管理功能班眯,對(duì)于O/R Mapping工具(Hibernate,MyBatis)的整合希停,Spring也提供了解決的方案烁巫。
7)Web框架:Spring也提供MVC Web框架的解決方案署隘,使用Spring Web框架的好處是可以善用IOC與AOP的功能,我們甚至可以輕松地替換使用不同的View層技術(shù)亚隙,例如使用JSP,結(jié)合Tiles磁餐,使用PDF作為展現(xiàn)給使用者的畫面技術(shù)。
????????也可以將自己熟悉的Web框架與Spring整合,例如Struts诊霹,JSF等羞延,都可以與Spring整合,而適用于當(dāng)前所進(jìn)行的應(yīng)用程序脾还。8)其它企業(yè)服務(wù)的封裝:對(duì)于一些服務(wù)伴箩,例如JNDI,Mail,任務(wù)計(jì)劃(Scheduling),遠(yuǎn)程(Remoting)等鄙漏,Spring不直接提供實(shí)現(xiàn)嗤谚,而是采取抽象層方式對(duì)這些業(yè)務(wù)進(jìn)行封裝,讓這些服務(wù)在使用時(shí)可以有一致的使用模型怔蚌,并且在使用上更為簡化巩步。
~小結(jié):
????????Spring是一個(gè)開源的JavaEE框架。它作為一個(gè)優(yōu)秀的輕量級(jí)的企業(yè)應(yīng)用開發(fā)框架桦踊,可以大大簡化企業(yè)應(yīng)用開發(fā)的復(fù)雜性椅野,能夠創(chuàng)建出松耦合、易測試籍胯、易擴(kuò)展竟闪、易維護(hù)的Java應(yīng)用系統(tǒng)。
二. Spring組成:
-
Spring框架的主要優(yōu)勢之一就是其分層架構(gòu)杖狼,分層架構(gòu)允許用戶選擇使用哪一個(gè)組件瘫怜。Spring框架的分層架構(gòu),由7個(gè)定義良好的模塊組成本刽。組成Spring框架的每個(gè)模塊(組件)都可以單獨(dú)存在鲸湃,或者與其他一個(gè)或多個(gè)模塊聯(lián)合使用。其組成圖片如下:
Spring AOP: 在AOP模塊中子寓,Spring對(duì)面向切面提供了豐富的支持暗挑。這個(gè)模塊是為Spring應(yīng)用系統(tǒng)開發(fā)切面的基礎(chǔ)。為了保證Spring與其他AOP框架之間的互通斜友,Spring的大部分AOP都是基于AOP Alliance的API開發(fā)的炸裆。AOP Alliance是一個(gè)開源項(xiàng)目,它的目的是促進(jìn)AOP的使用鲜屏,并且通過定義一套接口和組建來確保不同的AOP之間實(shí)現(xiàn)互通性烹看。Spring AOP模塊也引入了metadata編程。使用Spring的metadata洛史,你可以通過代碼中的注解來告訴Spring在哪里以及如何應(yīng)用切面惯殊。
Spring DAO: 編寫JDBC代碼時(shí)總是要寫一些樣板式的代碼,如:獲得連接也殖,創(chuàng)建語句土思,處理結(jié)果,最后關(guān)閉連接。Spring的JDBC和DAO模塊把這些樣板式的代碼抽象出來己儒,讓你的數(shù)據(jù)庫代碼變得簡單明了崎岂。這個(gè)模塊還建立了一個(gè)容易理解的數(shù)據(jù)庫異常層,它建立在各種數(shù)據(jù)庫錯(cuò)誤信息之上闪湾。以后就不用再去解釋那些隱晦專有的SQL錯(cuò)誤消息了冲甘。另外,這個(gè)模塊利用Spring的AOP模塊為Spring系統(tǒng)中的對(duì)象提供事務(wù)管理服務(wù)途样。
Spring ORM: Spring為那些喜歡使用ORM(Object/Relational Mapping)工具的開發(fā)人員提供了ORM模塊损合。Spring不想實(shí)現(xiàn)自己的ORM解決方案,但是它為許多流行的ORM框架做了鉤子程序娘纷,包括Hibernate嫁审,JDO和MYBATIS SQL影射。Spring的事務(wù)管理支持所有這些ORM框架以及JDBC赖晶。
Spring Web:Web上下文模塊建立在應(yīng)用上下文模塊的基礎(chǔ)之上律适,提供了適合Web系統(tǒng)的上下文。另外遏插,該模塊還支持多項(xiàng)其他面向Web的任務(wù)捂贿,如透明處理多文件上傳請求,自動(dòng)將請求參數(shù)邦定到業(yè)務(wù)對(duì)象中等胳嘲。這個(gè)模塊中還包括對(duì)Jakarta Struts的集成支持厂僧。
Spring Context: 如果說核心模塊中的BeanFactory使Spring成為容器的話,那么了牛,上下文模塊就是使Spring成為框架的原因颜屠。這個(gè)模塊擴(kuò)展了BeanFactory,添加了對(duì)I18N鹰祸,系統(tǒng)生命周期事件以及驗(yàn)證的支持甫窟。另外,這個(gè)模塊提供了很多企業(yè)級(jí)服務(wù)蛙婴,如電子郵件服務(wù)粗井,JNDI訪問,EJB集成街图,遠(yuǎn)程調(diào)用以及定時(shí)服務(wù)浇衬,并且支持與模板框架(如Velocity和FreeMarker)的集成。
Spring Core: Spring的所有模塊都是建立在核心容器之上的餐济。容器規(guī)定如何創(chuàng)建耘擂,配置和管理Bean,以及很多Spring的具體細(xì)節(jié)颤介。Spring核心容器為Spring框架提供了基礎(chǔ)功能梳星。在這個(gè)模塊中你會(huì)找到BeanFactory這個(gè)類赞赖,它是所有基于Spring框架系統(tǒng)的核心滚朵。BeanFactory采用工廠模式來實(shí)現(xiàn)IoC冤灾,它將系統(tǒng)的配置和依賴關(guān)系從代碼中獨(dú)立出來。當(dāng)遇到IoC來裝配Bean的使用辕近,我們都會(huì)討論核心模塊韵吨。
Spring Web MVC:Spring為Web系統(tǒng)提供了全功能的MVC框架。雖然Spring可以很容易地與其他MVC框架(如Struts)集成移宅,但是Spring的MVC框架利用IoC將控制邏輯和業(yè)務(wù)邏輯清晰地分離開來归粉。你可以自己聲明如何將請求參數(shù)綁定到業(yè)務(wù)對(duì)象中。
另外漏峰,Spring的MVC框架還可以使用Spring的其他服務(wù)糠悼,如信息國際化和驗(yàn)證服務(wù)。
~小結(jié):
Spring框架的組成:
- Springcore:提供IOC對(duì)象管理功能
- SpringAOP:面向切面編程
- SpringORM:提供和持久層框架進(jìn)行集成的功能
- SpringDAO:提供了數(shù)據(jù)庫連接浅乔,事務(wù)管理等功能的實(shí)現(xiàn)
- SpringWeb:提供和Sevlet技術(shù)進(jìn)行整合的功能
- SpringWeb MVC:是Spring的子框架
- SpringContext:提供和企業(yè)級(jí)開發(fā)技術(shù)進(jìn)行集成的功能
三.Spring的優(yōu)點(diǎn) & 為什么使用Spring
-
優(yōu)點(diǎn):
- 開源框架倔喂,開放性較高
- 有效地組織中間層對(duì)象
- 多種可選的事務(wù)處理方式
- 多種可選的持久層策略
- 多種可選的Web MVC框架策略
- 高度可擴(kuò)展的安全解決方案
- 有效的消除單例、工廠等模式的使用
- 將面向接口編程做到實(shí)處
- 使單元測試變得簡單
- 使EJB的使用成為一個(gè)選擇
- 提供了一致的數(shù)據(jù)訪問框架
- 只選擇你需要的
-
Why:
? 沒有使用Spring:
??????– 充斥了很多工廠類靖苇、singleton單例模式席噩;
??????– 配置也不夠集中,沒有一個(gè)統(tǒng)一的管理贤壁;
??????– 在業(yè)務(wù)層悼枢,我們一般都需要依賴Dao,我們需要自己寫一些工廠類來生成脾拆;
? 使用Spring:
??????– 它是輕量級(jí)的馒索,沒有侵入性,這是它流行的主要原因名船。
??????– 我們來裝配對(duì)象的依賴關(guān)系
??????– 把各個(gè)對(duì)象之間的依賴關(guān)系交給Spring 的IoC容器來做双揪。
PS:Spring的發(fā)展歷史及版本
??????Spring的核心代碼均來自于真實(shí)的項(xiàng)目,Rod Johnson是這個(gè)產(chǎn)品的創(chuàng)造者包帚,在《Expert One-on-One J2EE Design and Development》一書中第一次出現(xiàn)了Spring的一些核心思想渔期,是從商業(yè)項(xiàng)目開發(fā)實(shí)踐中逐步提煉出的一種架構(gòu)基調(diào)。
??????版本:2003發(fā)布渴邦,至今經(jīng)歷了1.0疯趟、1.1、1.2谋梭、2.0信峻、2.5、3.0瓮床、3.1盹舞、3.2产镐、4.0等版本,目前最新的是4.0版本踢步。