Spring源碼(1)-什么是Spring?Spring源碼入門(mén)_第1頁(yè)
Spring源碼(1)-什么是Spring?Spring源碼入門(mén)_第2頁(yè)
Spring源碼(1)-什么是Spring?Spring源碼入門(mén)_第3頁(yè)
Spring源碼(1)-什么是Spring?Spring源碼入門(mén)_第4頁(yè)
Spring源碼(1)-什么是Spring?Spring源碼入門(mén)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Spring源碼(1)-什么是Spring?Spring源碼?門(mén)為什么要有Spring??論在解析源碼,還是在看待其他問(wèn)題上,?先先來(lái)看第?個(gè)問(wèn)題,為什么要有Spring?為什么Spring這么流??為什么會(huì)有Spring?C++這個(gè)語(yǔ)?相信了解過(guò)的都知道,其對(duì)象是需要?動(dòng)回收的,?Java的優(yōu)點(diǎn)之?就是會(huì)?動(dòng)回收不?了的對(duì)象。但是如果在?個(gè)項(xiàng)?中,如果創(chuàng)建的對(duì)象過(guò)多,這個(gè)創(chuàng)建速度超過(guò)了達(dá)到回收條件的時(shí)限時(shí),內(nèi)存就會(huì)爆掉。那么很多?就會(huì)想,很多創(chuàng)建的對(duì)象其實(shí)都是重復(fù)的,能否把這些對(duì)象集中起來(lái),不?重復(fù)去創(chuàng)建,提?整個(gè)對(duì)象的利?率,那么就可以降低整個(gè)創(chuàng)建過(guò)多對(duì)象?導(dǎo)致內(nèi)存爆掉的問(wèn)題發(fā)?概率了。應(yīng)運(yùn)??的Spring就出來(lái)了,或者說(shuō)Spring就是帶著這樣的初衷?出?的。所有的對(duì)象都交給Spring這個(gè)容器(IOC容器)去管理,那么還節(jié)省了開(kāi)發(fā)?員維護(hù)這個(gè)對(duì)象的功夫,還可以讓其他框架的對(duì)象?樣也交給Spring去管理就可以了,那么即便在?個(gè)項(xiàng)?應(yīng)?多個(gè)框架的話,維護(hù)起來(lái)也不會(huì)?煩,如果這個(gè)框架不?,那么就把其從Spring容器中移除,不在管理(解耦)即可。什么是Spring?官?的定義是:Spring框架是?種輕量級(jí)的階級(jí)?案,是構(gòu)建企業(yè)級(jí)應(yīng)?程序的潛在?站式解決?案。在寫(xiě)這篇?章時(shí),即便在?開(kāi)始思考了為什么會(huì)有Spring這個(gè)框架之后,我也在想,什么是Spring?官?寫(xiě)的含糊其辭的,那么我?在想Spring就是IOC和AOP了嗎?在結(jié)合在以前項(xiàng)?的應(yīng)?和各種遇到的坑,我給予Spring的定義是:管理項(xiàng)?中所有主動(dòng)注?容器中的對(duì)象的框架。給予這個(gè)定義的原因在于,每次做項(xiàng)?和?試時(shí),別?問(wèn)我們都會(huì)給予?個(gè)回答SSM,Spring必然是包含在其中的,并且Spring?多種形式(單例/多例)管理注?到IOC容器中的對(duì)象。Spring是?向Bean的編程(BOP:BeanOrientedProgramming),Bean在Spring中才是真正的主?,即對(duì)象。Bean在Spring中的作?就像Object對(duì)OOP的意義?樣,沒(méi)有對(duì)象的概念就像沒(méi)有?向?qū)ο缶幊?,Spring中沒(méi)有Bean也就沒(méi)有Spring存在的意義。Spring提供了通過(guò)配置?件或者注解的?式來(lái)管理對(duì)象之間的依賴關(guān)系??刂品崔D(zhuǎn)(InversionOfControl,IOC):是?向?qū)ο缶幊讨械?種設(shè)計(jì)原則,可以?來(lái)減低代碼之間的耦合度。其中最常見(jiàn)的?式叫依賴注?(DenpendencyInjection,DI),還有?種?式叫依賴查找(DependencyLookup)。過(guò)程:通過(guò)控制反轉(zhuǎn),對(duì)象在被創(chuàng)建時(shí),由?個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其依賴的對(duì)象的引?傳遞給它,即依賴被注?的到對(duì)象。Spring體系SpringCoreSpringContextSpringWebSpringMVCSpringDAOSpringORM上下?容器,是BeanFactory功能加強(qiáng)的?個(gè)接?提供Web開(kāi)發(fā)針對(duì)Web應(yīng)?的MVC思想提供JDBC抽象層,簡(jiǎn)化了JDBC編碼,同時(shí)編碼更具有健壯性與流?的ORM框架結(jié)合SpringAOP?向切?編程Spring框架結(jié)構(gòu)(v5.x)核?容器層(CoreContainer)CoreContainer(核?容器):包含有Beans、Core、Context、ExpressionLanguae模塊。其中Core和Beans模塊是框架的基礎(chǔ)部分,提供IOC(控制反轉(zhuǎn))和DI(依賴注?)特性。這?的基礎(chǔ)概念是BeanFactory,它提供Factory模式的經(jīng)典實(shí)現(xiàn)來(lái)消除對(duì)程序性單例模式的需要,并真正的允許你從程序邏輯中分離出依賴關(guān)系和配置。Core模塊:主要包含Spring框架基本的核??具類,Spring的其他組件都要使?到這個(gè)包?的類,Core模塊是其他組件的基本核?。Beans模塊:這個(gè)是所有應(yīng)?都要?到的,包含訪問(wèn)配置?件、創(chuàng)建和管理Bean,以及進(jìn)?InversionofControl/DependencyInection(IOC/DI)操作相關(guān)的所有類。Context模塊:構(gòu)建于Core和Beans模塊基礎(chǔ)之上,提供了?種類似于JNDI注冊(cè)器的框架式對(duì)象訪問(wèn)?法。Context模塊基礎(chǔ)了Beans的特性,為Spring核?提供了?量擴(kuò)展,添加了對(duì)國(guó)際化(例如資源綁定)、事件傳播、資源加載和對(duì)Context的透明創(chuàng)建的?持。Contet同時(shí)也?持J2EE的?些特性,例如EJB、JMX和基礎(chǔ)的遠(yuǎn)程處理。AppliationContext接?是Contetext模塊的關(guān)鍵。ExpressionLanguage模塊:提供了?個(gè)強(qiáng)?的表達(dá)式語(yǔ)??于在運(yùn)?時(shí)查詢和操作對(duì)象。是JSP2.1規(guī)范中定義的UnifedexpressionLanguage的?個(gè)擴(kuò)展。這個(gè)語(yǔ)??持設(shè)置/獲取屬性值,屬性的分配,?法的調(diào)?,訪問(wèn)數(shù)組上下?,容器和索引器,邏輯和算術(shù)運(yùn)算符,命名變量以及Spring的IOCring器中根據(jù)名稱檢索對(duì)象,它也?持List投影,選擇和?般的List聚合。串聯(lián):Beans模塊是?于操作對(duì)象進(jìn)?的IOC/DI的。Core模塊提供?具類?法,?于整個(gè)Spring框架。Context模塊是在Beans和Core模塊已經(jīng)完成了對(duì)對(duì)象的IOC/DI的操作之后,提供了?向不同環(huán)境的?些?級(jí)特性(國(guó)際化)。ExpressionLanguage模塊則是為了??所有的模塊進(jìn)?編寫(xiě),?如*這個(gè)字符的解析。數(shù)據(jù)訪問(wèn)/集成層(DataAccess/Integration)這個(gè)在聽(tīng)名字就知道了,就是提供與其他中間件的交互模塊的,包括有JDBC、OXM、JMS、Transaction模塊。JDBC模塊:提供了?個(gè)JDBC抽象層,可以消除冗長(zhǎng)的JDBC編碼和解析數(shù)據(jù)庫(kù)?商的錯(cuò)誤代碼。這個(gè)模塊包含了Spring對(duì)JDBC數(shù)據(jù)訪問(wèn)進(jìn)?封裝的所有類。ORM(ObjectRelationalMapping):名為對(duì)象關(guān)系映射模塊,這個(gè)為對(duì)象-關(guān)系映射的API,如Hibernate、Mybatis這些ORM框架,提供了?個(gè)交互層,利?ORM封裝包,可以混合使?所有Spring提供的特性進(jìn)?O/R映射。如簡(jiǎn)單的聲明式事務(wù)管理。Spring框架插?了若?個(gè)ORM框架,從?提供了ORM的對(duì)象關(guān)系?具,其中包括JDO、Hibernate、MybatisSQLMap。所有這些都遵從Spring的通?事務(wù)和DAO異常層次結(jié)構(gòu)。OXM模塊:提供了?個(gè)對(duì)Object/XML映射實(shí)現(xiàn)的抽象層,Object/XML映射實(shí)現(xiàn)包括JAXB、Castor、XMLBeans、JiBX和XStream。JMS(JavaMessageingService)模塊:包括了?些制造和消費(fèi)消息的特性。Transaction模塊:?持編程和聲明式的事務(wù)管理,這些事務(wù)類必須實(shí)現(xiàn)特定的接?,并且對(duì)所有POJO都適?。Web層Web上下?模塊建在?應(yīng)?程序上下?模塊之上,為基于Web的應(yīng)?成提供了上下?。所以Spring框架?持與JakartaStruts的集成。Web模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮?作。Web層包含了Web、Web-Servlet、Web-Struts和Web-Porlet模塊。Web模塊:提供了基礎(chǔ)的?向Web的集成特性,?如多?件上傳,使?ServletLiSteners初始化IOC容器以及?個(gè)?向Web的應(yīng)?上下?,還包含Srping遠(yuǎn)程?持中Web的相關(guān)部分。Web-MVC模塊:包含Spring的Model-View-Controller(MVC)的實(shí)現(xiàn)。Spring的MVC框架使得模型范圍內(nèi)的代碼和WebForms之間能夠清楚的分離開(kāi)來(lái),并與Spring框架的其他特性集成在?起。Web-Socket模塊:提供了與Web前端的全雙?通訊協(xié)議。Web-Flux模塊:是?個(gè)新的?阻塞函數(shù)式ReactiveWeb框架,可以?來(lái)建?步異、?阻塞,事件驅(qū)動(dòng)的服務(wù),并且擴(kuò)展性?常好。串聯(lián):Web模塊提供基礎(chǔ)。WebMVC模塊提供MVC分離。Web-Socket模塊在Web模塊和WebMVC模塊的基礎(chǔ)上提供代碼解耦的?絡(luò)鏈接。WebFlux模塊提供?阻塞的形式來(lái)去實(shí)現(xiàn)NIO的特性。AOP、Aspects、Instrmentation(設(shè)備?持)AOP(AspectOraientedProgramming)模塊:AOP模塊提供了?個(gè)符合AOP聯(lián)盟標(biāo)準(zhǔn)的?向切?編程的實(shí)現(xiàn),可以讓定義例如?法攔截器和切點(diǎn)。從?將邏輯代碼分開(kāi),降低耦合性。利?Source-Level的元數(shù)據(jù)功能,還可以將各種?為信息合并到代碼中。通過(guò)Spring配置管理的特性,SpringAOP模塊之間將?向切?的功能集成到Spring框架中,所以很容易的使得Spring框架管理的任何對(duì)象?持AOP。為基于Spring的應(yīng)?成的對(duì)象提供事務(wù)管理服務(wù)。通過(guò)使?SpringAOP,不?依賴EJB組件,就可以加個(gè)聲明式事務(wù)管理集成到應(yīng)?程序中。

Aspects模塊:提供AspectJ的集成?持,AspectJ是?個(gè)?向切?的框架,并且它還擴(kuò)展了Java語(yǔ)?,主要是為SpringAOP提供多種AOP實(shí)現(xiàn)?法。Instrumentation(設(shè)備?持)模塊:提供了ClassInstrumentation(類儀器)?持和ClassLoader(類加載)的實(shí)現(xiàn),使得可以在特定的應(yīng)?服務(wù)器上使?。應(yīng)該算是AOP的?個(gè)?援模塊,主要作?是在JVM啟?時(shí),?成?個(gè)代理類,開(kāi)發(fā)者可以通過(guò)代理類在運(yùn)?時(shí)修改類的字節(jié),從?改變?個(gè)類的功能,實(shí)現(xiàn)AOP的功能。MessagingMessaging模塊:這是從Spring4開(kāi)始新加?的?個(gè)模塊,主要是為Spring框架繼承?些基礎(chǔ)的報(bào)?傳送應(yīng)?。Test層Test模塊:?于使?Junit和TestNG對(duì)Spring組件進(jìn)?測(cè)試。串聯(lián)核?容器層(CoreContainer)提供了基礎(chǔ),幫助應(yīng)?管理對(duì)象。數(shù)據(jù)訪問(wèn)/集成層(DataAccess/Integration)提供了對(duì)象與數(shù)據(jù)庫(kù)的交互性映射。Web層提供了?絡(luò)交互的相關(guān)組件。AOP、Asepects、Instramenetation提供了輔助型的增強(qiáng)功能,讓整個(gè)開(kāi)發(fā)更簡(jiǎn)單,也增強(qiáng)了健壯性(?如AOP?志)。Message提供了對(duì)?些消息的報(bào)?傳送的優(yōu)化等內(nèi)容,為其他層提供增強(qiáng)型的輔助功能。Test層為其他層增強(qiáng)了健壯性。Spring源碼結(jié)構(gòu)(v5.2.7.RELEASE)在瀏覽器搜索很多Spring源碼解析相關(guān)的?章,?上來(lái)就告訴你SpringIOC是什么?源碼是怎么樣的?讓我們很困惑,在了解了Spring的框架結(jié)構(gòu)之后,會(huì)發(fā)現(xiàn)其實(shí)Spring源碼閱讀似乎只需要閱讀其中?些核?模塊即可,其他的輔助模塊其實(shí)是可以在使?到在去閱讀的?,F(xiàn)在在來(lái)看看Spring的源碼結(jié)構(gòu)究竟是怎么樣的,以及和剛剛講的Spring框架結(jié)構(gòu)有什么關(guān)聯(lián)。

Srping總共?約有20個(gè)模塊,1300多個(gè)不同的?件組成。?這些組件被分別整合在核?容器層(CoreContainer)、數(shù)據(jù)訪問(wèn)及集成(DataAccess/Integeration)、AOP、Web、Messaging、Test這?個(gè)模塊中。核?容器層(CoreContainer)核?層是這4個(gè)模塊組成的。1、spring-beans,2、spring-core,3、spring-cotext,4、spring-expression。spring-beans和spring-core模塊:是Spring框架的核?模塊,包含了IOC(控制反轉(zhuǎn),InversionofControl)和DI(依賴注?,DependencyInjection)。BeanFactory接?是Spring框架中的核?結(jié)構(gòu),它是??模式的具體實(shí)現(xiàn)。BeanFactory使?控制反轉(zhuǎn)對(duì)應(yīng)?程序的配置和依賴性規(guī)范與實(shí)際應(yīng)?程序代碼進(jìn)?分離。但BeanFactory容器實(shí)例化后并不會(huì)?動(dòng)實(shí)例化Bean,只有當(dāng)Bean被使?時(shí),BeanFactory才會(huì)對(duì)該Bean進(jìn)?實(shí)例化與依賴關(guān)系的裝配。spring-context模塊:構(gòu)架于spring-beans和spring-core模塊之上,這個(gè)模塊擴(kuò)展了BeanFactory,為BeanFactory添加了Bean?命周期控制、框架事件體系以及資源加載透明化等功能。?且這個(gè)模塊還提供了很多企業(yè)級(jí)的?持,?如郵件訪問(wèn)、遠(yuǎn)程控制、任務(wù)調(diào)度等。ApplicationContext是該模塊的核?接?,是BeanFactory的超類,與BeanFactory不同,ApplicationCotext容器實(shí)例化后會(huì)?動(dòng)對(duì)所有的單實(shí)例Bean進(jìn)?實(shí)例化與依賴關(guān)系的裝配,使之處于待?狀態(tài)。spring-expression模塊:統(tǒng)?表達(dá)式語(yǔ)?(EL)的擴(kuò)展模塊,可以查詢、管理運(yùn)?中的對(duì)象,同時(shí)也?便的可以調(diào)?對(duì)象?法、操作數(shù)組、集合等。語(yǔ)法類似于傳統(tǒng)EL,但提供了額外的功能,最出?的就是函數(shù)調(diào)?和簡(jiǎn)單字符串的模板函數(shù),這樣的語(yǔ)?特性是基于Spring產(chǎn)品的需求?設(shè)計(jì),使其可以?常?便的與SpringIOC進(jìn)?交互。數(shù)據(jù)訪問(wèn)/集成層(DataAccess/Integration)數(shù)據(jù)訪問(wèn)/集成層是這5個(gè)模塊組成。1、spring-jdbc,2、spring-tx,3、spring-orm,4、spring-jms,5、spring-oxm。spring-jdbc模塊:這個(gè)是Spring提供的JDBC抽象框架的主要實(shí)現(xiàn)模塊,?于簡(jiǎn)化SpringJDBC。主要是提供JDBC的模板?式、關(guān)系數(shù)據(jù)庫(kù)對(duì)象化?式、SimpleJdbc?式、事務(wù)管理來(lái)簡(jiǎn)化JDBC編程,主要實(shí)現(xiàn)類是JdbcTemplate、SimpleJdbcTemplate、NamedParameterJdbcTemplate。spring-tx模塊:這個(gè)是SpringJDBC事務(wù)控制實(shí)現(xiàn)模塊。Spring框架對(duì)事務(wù)做了很好的封裝,通過(guò)它的AOP配置,可以靈活的配置在需多求和應(yīng)?中,直接使?JDBC事務(wù)控制還是有優(yōu)勢(shì)的。其實(shí)事務(wù)是以業(yè)務(wù)邏輯為基礎(chǔ)的,?個(gè)完整的業(yè)務(wù)應(yīng)該對(duì)應(yīng)業(yè)務(wù)層?的?個(gè)?法。如果業(yè)務(wù)操作失敗,則整個(gè)事務(wù)回滾。所以事務(wù)控制絕對(duì)應(yīng)該放在業(yè)務(wù)層的。但是持久層的設(shè)計(jì)則應(yīng)該遵循保證操作的原?性,即持久層?的每個(gè)?法都是不可以分割的。所以在使?SpringJDBC事務(wù)時(shí),要特別注意其特殊性。spring-orm模塊:這個(gè)是ORM框架的?撐模塊,主要集成Hibernate、JavaPersistenceAPI(JPA)和JavaDataObjects(JDO)?于資源管理、數(shù)據(jù)訪問(wèn)對(duì)象(DAO)的實(shí)現(xiàn)和事務(wù)策略。spring-jmx(JavaMessagingService)模塊:能顧發(fā)送和接受信息,?SpringFramework4.1以后,還提供了對(duì)spring-messaging模塊的?撐。spring-oxm模塊:提供了?個(gè)抽象層以?撐OXM(ObjectXMLMapping),是?個(gè)O/M-mapper,將java對(duì)象映射成XML數(shù)據(jù),或者講XML數(shù)據(jù)映射成java對(duì)象,?如JAXB、XMLBeans、XStream等。Web層Web層是這4個(gè)模塊組成的。1、spring-web,2、spring-webmvc,3、spring-websocket,4、spring-webflux。spring-web模塊:這個(gè)模塊為Spring提供了最基礎(chǔ)的Web?持,主要建?于核?容器之上,通過(guò)Servlet或Listeners來(lái)初始化IOC容器,也包含?些魚(yú)Web相關(guān)的?持。spring-webmvc模塊:這個(gè)模塊眾所周知是?個(gè)Web-Servlet模塊,實(shí)現(xiàn)了SpringMVC(Model-View-Controller)的Web應(yīng)?。spring-websocket模塊:主要是與Web前端的全雙?通訊的協(xié)議。spring-webflux模塊:是?個(gè)新的?阻塞函數(shù)式ReactiveWeb框架,可以?來(lái)建?異步的,?阻塞的事件驅(qū)動(dòng)的服務(wù),并且擴(kuò)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論