日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介

發(fā)布時(shí)間:2025/3/21 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


? ? ? ? ?spring?是一個(gè)開(kāi)源框架,是為了解決企業(yè)應(yīng)用程序開(kāi)發(fā)復(fù)雜性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個(gè)組件,同時(shí)為?J2EE?應(yīng)用程序開(kāi)發(fā)提供集成的框架。??然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。?Spring的核心是個(gè)輕量級(jí)容器(Container),實(shí)現(xiàn)了IoCInversion?of?Control)模式的容器,Spring的目標(biāo)是實(shí)現(xiàn)一個(gè)全方位的整合框架,在Spring框架下實(shí)現(xiàn)多個(gè)子框架的組合,這些子框架之間彼此可以獨(dú)立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop?shop的框架整合方案?

??????簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC和面向切面(AOP)的容器框架。 

輕量——從大小與開(kāi)銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類?! ?/span>

控制反轉(zhuǎn)——Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoCJNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。  

面向切面——Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持?! ?/span>

容器——Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。  

框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你?! ∷?/span>Spring的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。?

Spring?框架是一個(gè)分層架構(gòu)由?7?個(gè)定義良好的模塊組成。Spring?模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理?bean?的方式,如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
Spring?框架的分為7個(gè)模塊,組成?Spring?框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:?

  1.核心容器:核心容器提供?Spring?框架的基本功能。核心容器的主要組件是?BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory?使用控制反轉(zhuǎn)?(IOC)?模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)。
  2.Spring?上下文:Spring?上下文是一個(gè)配置文件,向?Spring?框架提上下文信息。Spring?上下文包括企業(yè)服務(wù),例如?JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。
  3.Spring?AOP:通過(guò)配置管理特性,Spring?AOP?模塊直接將面向方面的編程功能集成到了?Spring?框架中。所以,可以很容易地使?Spring?框架管理的任何對(duì)象支持?AOP。Spring?AOP?模塊為基于?Spring?的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用?Spring?AOP,不用依賴?EJB?組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。
?? ? ??4.?Spring?DAO:JDBC?DAO?抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫(xiě)的異常代碼數(shù)量(例如打開(kāi)和關(guān)閉連接)。Spring?DAO?的面向?JDBC?的異常遵從通用的?DAO?異常層次結(jié)構(gòu)。
? ? ??5.Spring?ORM:Spring?框架插入了若干個(gè)?ORM?框架,從而提供了?ORM?的對(duì)象關(guān)系工具,其中包括?JDO、hibernate?和?iBatis?SQL?Map。所有這些都遵從?Spring?的通用事務(wù)和?DAO?異常層次結(jié)構(gòu)。
  6.?Spring?Web?模塊:Web?上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于?Web?的應(yīng)用程序提供了上下文。所以,Spring?框架支持與?Jakarta?Struts?的集成。Web?模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/span>
  7.?Spring?MVC?框架:MVC?框架是一個(gè)全功能的構(gòu)建?Web?應(yīng)用程序的?MVC?實(shí)現(xiàn)。通過(guò)策略接口,MVC?框架變成為高度可配置的,MVC?容納了大量視圖技術(shù),其中包括?JSP、Velocity、Tiles、iText?和?POI

  ?Spring?框架的功能可以用在任何?J2EE?服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring?的核心要點(diǎn)是:支持不綁定到特定?J2EE?服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問(wèn)對(duì)象。毫無(wú)疑問(wèn),這樣的對(duì)象可以在不同?J2EE?環(huán)境?(Web?或?EJB)、獨(dú)立應(yīng)用程序、測(cè)試環(huán)境之間重用。??

????????

總結(jié)起來(lái),Spring有如下優(yōu)點(diǎn):  

1.低侵入式設(shè)計(jì),代碼污染極低  

2.?獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)Write?Once,Run?Anywhere的承諾  

3.SpringDI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性  

4.Spring并不完全依賴于Spring,開(kāi)發(fā)者可自由選用Spring框架的部分或全部?????

?????IOC?和?AOP:這兩個(gè)概念可以算是spring中的核心了,這兩個(gè)概念非常抽象,并且也不容易理解,所以我們下面來(lái)簡(jiǎn)單來(lái)描述一下這兩個(gè)概念。
  ??控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器?(在?Spring?框架中是?IOC?容器)?負(fù)責(zé)將這些聯(lián)系在一起。在典型的?IOC?場(chǎng)景中,容器創(chuàng)建了所有對(duì)象,并設(shè)置必要的屬性將它們連接在一起,決定什么時(shí)間調(diào)用方法。下表列出了?IOC?的一個(gè)實(shí)現(xiàn)模式。


類型?1

服務(wù)需要實(shí)現(xiàn)專門的接口,通過(guò)接口,由對(duì)象提供這些服務(wù),可以從對(duì)象查詢依賴性(例如,需要的附加服務(wù)),這種用的很少

類型?2

通過(guò)?JavaBean?的屬性(例如?setter?方法)分配依賴性

類型?3

依賴性以構(gòu)造函數(shù)的形式提供,不以?JavaBean?屬性的形式公開(kāi)


Spring?框架的?IOC?容器主要采用類型?2?和類型3?實(shí)現(xiàn)。

  ?面向方面的編程,即?AOP,是一種編程技術(shù),它允許程序員對(duì)橫切關(guān)注點(diǎn)或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模塊化。AOP?的核心構(gòu)造是方面,它將那些影響多個(gè)類的行為封裝到可重用的模塊中。

  AOP?和?IOC?是補(bǔ)充性的技術(shù),它們都運(yùn)用模塊化方式解決企業(yè)應(yīng)用程序開(kāi)發(fā)中的復(fù)雜問(wèn)題。在典型的面向?qū)ο箝_(kāi)發(fā)方式中,可能要將日志記錄語(yǔ)句放在所有方法和?Java?類中才能實(shí)現(xiàn)日志功能。在?AOP?方式中,可以反過(guò)來(lái)將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需要日志的組件上。當(dāng)然,優(yōu)勢(shì)就是?Java?類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用?Spring?AOP?編寫(xiě)的應(yīng)用程序代碼是松散耦合的。AOP?的功能完全集成到了?Spring?事務(wù)管理、日志和其他各種特性的上下文中。

IOC?容器:Spring?設(shè)計(jì)的核心是?org.springframework.beans?包,它的設(shè)計(jì)目標(biāo)是與?JavaBean?組件一起使用。這個(gè)包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個(gè)最高級(jí)抽象是?BeanFactory?接口,它是工廠設(shè)計(jì)模式的實(shí)現(xiàn),允許通過(guò)名稱創(chuàng)建和檢索對(duì)象。BeanFactory?也可以管理對(duì)象之間的關(guān)系。


BeanFactory?支持兩個(gè)對(duì)象模型

1.單態(tài)?模型提供了具有特定名稱的對(duì)象的共享實(shí)例,可以在查詢時(shí)對(duì)其進(jìn)行檢索。Singleton?是默認(rèn)的也是最常用的對(duì)象模型。對(duì)于無(wú)狀態(tài)服務(wù)對(duì)象很理想。
2.?原型?模型確保每次檢索都會(huì)創(chuàng)建單獨(dú)的對(duì)象。在每個(gè)用戶都需要自己的對(duì)象時(shí),原型模型最適合。
bean?工廠的概念是?Spring?作為?IOC?容器的基礎(chǔ)。IOC?將處理事情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架。正如我將在下一個(gè)示例中演示的那樣,Spring?框架使用?JavaBean?屬性和配置數(shù)據(jù)來(lái)指出必須設(shè)置的依賴關(guān)系。?

 ??????Spring的源碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。Spring框架源碼無(wú)疑是Java技術(shù)的最佳實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和應(yīng)用開(kāi)發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果。?可是從哪著手研究Spring卻是很多新手頭疼的地方,下面的參考資料將帶領(lǐng)大家慢慢的深入解析Spring?

1?Spring中的事務(wù)處理

2?ioc容器在Web容器中的啟動(dòng)

3?Spring?JDBC

4?Spring?MVC

5?Spring?AOP獲取Proxy

6?Spring聲明式事務(wù)處理

7?Spring?AOP中對(duì)攔截器調(diào)用的實(shí)現(xiàn)

8?Spring驅(qū)動(dòng)Hibernate的實(shí)現(xiàn)

9?Spring?Acegi框架鑒權(quán)的實(shí)現(xiàn)

具體的源碼解析內(nèi)容大家可以百度或者谷歌一下,可以找到大量源碼解析內(nèi)容。


from:?

? ? ? ? ?spring?是一個(gè)開(kāi)源框架,是為了解決企業(yè)應(yīng)用程序開(kāi)發(fā)復(fù)雜性而創(chuàng)建的。框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個(gè)組件,同時(shí)為?J2EE?應(yīng)用程序開(kāi)發(fā)提供集成的框架。??然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。?Spring的核心是個(gè)輕量級(jí)容器(Container),實(shí)現(xiàn)了IoCInversion?of?Control)模式的容器,Spring的目標(biāo)是實(shí)現(xiàn)一個(gè)全方位的整合框架,在Spring框架下實(shí)現(xiàn)多個(gè)子框架的組合,這些子框架之間彼此可以獨(dú)立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop?shop的框架整合方案?

??????簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC和面向切面(AOP)的容器框架。 

輕量——從大小與開(kāi)銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類?! ?/span>

控制反轉(zhuǎn)——Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoCJNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它?! ?/span>

面向切面——Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持?! ?/span>

容器——Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用?! ?/span>

框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你。  所有Spring的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。?

Spring?框架是一個(gè)分層架構(gòu)由?7?個(gè)定義良好的模塊組成。Spring?模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理?bean?的方式,如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
Spring?框架的分為7個(gè)模塊,組成?Spring?框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:?

  1.核心容器:核心容器提供?Spring?框架的基本功能。核心容器的主要組件是?BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory?使用控制反轉(zhuǎn)?(IOC)?模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)。
  2.Spring?上下文:Spring?上下文是一個(gè)配置文件,向?Spring?框架提上下文信息。Spring?上下文包括企業(yè)服務(wù),例如?JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。
  3.Spring?AOP:通過(guò)配置管理特性,Spring?AOP?模塊直接將面向方面的編程功能集成到了?Spring?框架中。所以,可以很容易地使?Spring?框架管理的任何對(duì)象支持?AOP。Spring?AOP?模塊為基于?Spring?的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用?Spring?AOP,不用依賴?EJB?組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。
?? ? ??4.?Spring?DAO:JDBC?DAO?抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫(xiě)的異常代碼數(shù)量(例如打開(kāi)和關(guān)閉連接)。Spring?DAO?的面向?JDBC?的異常遵從通用的?DAO?異常層次結(jié)構(gòu)。
? ? ??5.Spring?ORM:Spring?框架插入了若干個(gè)?ORM?框架,從而提供了?ORM?的對(duì)象關(guān)系工具,其中包括?JDO、hibernate?和?iBatis?SQL?Map。所有這些都遵從?Spring?的通用事務(wù)和?DAO?異常層次結(jié)構(gòu)。
  6.?Spring?Web?模塊:Web?上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于?Web?的應(yīng)用程序提供了上下文。所以,Spring?框架支持與?Jakarta?Struts?的集成。Web?模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/span>
  7.?Spring?MVC?框架:MVC?框架是一個(gè)全功能的構(gòu)建?Web?應(yīng)用程序的?MVC?實(shí)現(xiàn)。通過(guò)策略接口,MVC?框架變成為高度可配置的,MVC?容納了大量視圖技術(shù),其中包括?JSPVelocityTiles、iText?和?POI。

  ?Spring?框架的功能可以用在任何?J2EE?服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring?的核心要點(diǎn)是:支持不綁定到特定?J2EE?服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問(wèn)對(duì)象。毫無(wú)疑問(wèn),這樣的對(duì)象可以在不同?J2EE?環(huán)境?(Web?或?EJB)、獨(dú)立應(yīng)用程序、測(cè)試環(huán)境之間重用。??

????????

總結(jié)起來(lái),Spring有如下優(yōu)點(diǎn):  

1.低侵入式設(shè)計(jì),代碼污染極低  

2.?獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)Write?Once,Run?Anywhere的承諾  

3.SpringDI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性  

4.Spring并不完全依賴于Spring,開(kāi)發(fā)者可自由選用Spring框架的部分或全部?????

?????IOC?和?AOP:這兩個(gè)概念可以算是spring中的核心了,這兩個(gè)概念非常抽象,并且也不容易理解,所以我們下面來(lái)簡(jiǎn)單來(lái)描述一下這兩個(gè)概念。
  ??控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器?(在?Spring?框架中是?IOC?容器)?負(fù)責(zé)將這些聯(lián)系在一起。在典型的?IOC?場(chǎng)景中,容器創(chuàng)建了所有對(duì)象,并設(shè)置必要的屬性將它們連接在一起,決定什么時(shí)間調(diào)用方法。下表列出了?IOC?的一個(gè)實(shí)現(xiàn)模式。


類型?1

服務(wù)需要實(shí)現(xiàn)專門的接口,通過(guò)接口,由對(duì)象提供這些服務(wù),可以從對(duì)象查詢依賴性(例如,需要的附加服務(wù)),這種用的很少

類型?2

通過(guò)?JavaBean?的屬性(例如?setter?方法)分配依賴性

類型?3

依賴性以構(gòu)造函數(shù)的形式提供,不以?JavaBean?屬性的形式公開(kāi)


Spring?框架的?IOC?容器主要采用類型?2?和類型3?實(shí)現(xiàn)。

  ?面向方面的編程,即?AOP,是一種編程技術(shù),它允許程序員對(duì)橫切關(guān)注點(diǎn)或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模塊化。AOP?的核心構(gòu)造是方面,它將那些影響多個(gè)類的行為封裝到可重用的模塊中。

  AOP?和?IOC?是補(bǔ)充性的技術(shù),它們都運(yùn)用模塊化方式解決企業(yè)應(yīng)用程序開(kāi)發(fā)中的復(fù)雜問(wèn)題。在典型的面向?qū)ο箝_(kāi)發(fā)方式中,可能要將日志記錄語(yǔ)句放在所有方法和?Java?類中才能實(shí)現(xiàn)日志功能。在?AOP?方式中,可以反過(guò)來(lái)將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需要日志的組件上。當(dāng)然,優(yōu)勢(shì)就是?Java?類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用?Spring?AOP?編寫(xiě)的應(yīng)用程序代碼是松散耦合的。AOP?的功能完全集成到了?Spring?事務(wù)管理、日志和其他各種特性的上下文中。

IOC?容器:Spring?設(shè)計(jì)的核心是?org.springframework.beans?包,它的設(shè)計(jì)目標(biāo)是與?JavaBean?組件一起使用。這個(gè)包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個(gè)最高級(jí)抽象是?BeanFactory?接口,它是工廠設(shè)計(jì)模式的實(shí)現(xiàn),允許通過(guò)名稱創(chuàng)建和檢索對(duì)象。BeanFactory?也可以管理對(duì)象之間的關(guān)系。


BeanFactory?支持兩個(gè)對(duì)象模型

1.單態(tài)?模型提供了具有特定名稱的對(duì)象的共享實(shí)例,可以在查詢時(shí)對(duì)其進(jìn)行檢索。Singleton?是默認(rèn)的也是最常用的對(duì)象模型。對(duì)于無(wú)狀態(tài)服務(wù)對(duì)象很理想。
2.?原型?模型確保每次檢索都會(huì)創(chuàng)建單獨(dú)的對(duì)象。在每個(gè)用戶都需要自己的對(duì)象時(shí),原型模型最適合。
bean?工廠的概念是?Spring?作為?IOC?容器的基礎(chǔ)。IOC?將處理事情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架。正如我將在下一個(gè)示例中演示的那樣,Spring?框架使用?JavaBean?屬性和配置數(shù)據(jù)來(lái)指出必須設(shè)置的依賴關(guān)系。?

 ??????Spring的源碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。Spring框架源碼無(wú)疑是Java技術(shù)的最佳實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和應(yīng)用開(kāi)發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果。?可是從哪著手研究Spring卻是很多新手頭疼的地方,下面的參考資料將帶領(lǐng)大家慢慢的深入解析Spring?

1?Spring中的事務(wù)處理

2?ioc容器在Web容器中的啟動(dòng)

3?Spring?JDBC

4?Spring?MVC

5?Spring?AOP獲取Proxy

6?Spring聲明式事務(wù)處理

7?Spring?AOP中對(duì)攔截器調(diào)用的實(shí)現(xiàn)

8?Spring驅(qū)動(dòng)Hibernate的實(shí)現(xiàn)

9?Spring?Acegi框架鑒權(quán)的實(shí)現(xiàn)

具體的源碼解析內(nèi)容大家可以百度或者谷歌一下,可以找到大量源碼解析內(nèi)容。






http://blog.csdn.net/csh624366188/article/details/7633836

? ? ? ? ?spring?是一個(gè)開(kāi)源框架,是為了解決企業(yè)應(yīng)用程序開(kāi)發(fā)復(fù)雜性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個(gè)組件,同時(shí)為?J2EE?應(yīng)用程序開(kāi)發(fā)提供集成的框架。??然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。?Spring的核心是個(gè)輕量級(jí)容器(Container),實(shí)現(xiàn)了IoCInversion?of?Control)模式的容器,Spring的目標(biāo)是實(shí)現(xiàn)一個(gè)全方位的整合框架,在Spring框架下實(shí)現(xiàn)多個(gè)子框架的組合,這些子框架之間彼此可以獨(dú)立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop?shop的框架整合方案?

??????簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC和面向切面(AOP)的容器框架?!?/span>

輕量——從大小與開(kāi)銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。  

控制反轉(zhuǎn)——Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoCJNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它?! ?/span>

面向切面——Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。  

容器——Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用?! ?/span>

框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你?! ∷?/span>Spring的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。?

Spring?框架是一個(gè)分層架構(gòu)由?7?個(gè)定義良好的模塊組成。Spring?模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理?bean?的方式,如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
Spring?框架的分為7個(gè)模塊,組成?Spring?框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:?

  1.核心容器:核心容器提供?Spring?框架的基本功能。核心容器的主要組件是?BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory?使用控制反轉(zhuǎn)?(IOC)?模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)。
  2.Spring?上下文:Spring?上下文是一個(gè)配置文件,向?Spring?框架提上下文信息。Spring?上下文包括企業(yè)服務(wù),例如?JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。
  3.Spring?AOP:通過(guò)配置管理特性,Spring?AOP?模塊直接將面向方面的編程功能集成到了?Spring?框架中。所以,可以很容易地使?Spring?框架管理的任何對(duì)象支持?AOP。Spring?AOP?模塊為基于?Spring?的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用?Spring?AOP,不用依賴?EJB?組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。
?? ? ??4.?Spring?DAO:JDBC?DAO?抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫(xiě)的異常代碼數(shù)量(例如打開(kāi)和關(guān)閉連接)。Spring?DAO?的面向?JDBC?的異常遵從通用的?DAO?異常層次結(jié)構(gòu)。
? ? ??5.Spring?ORM:Spring?框架插入了若干個(gè)?ORM?框架,從而提供了?ORM?的對(duì)象關(guān)系工具,其中包括?JDO、hibernate?和?iBatis?SQL?Map。所有這些都遵從?Spring?的通用事務(wù)和?DAO?異常層次結(jié)構(gòu)。
  6.?Spring?Web?模塊:Web?上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于?Web?的應(yīng)用程序提供了上下文。所以,Spring?框架支持與?Jakarta?Struts?的集成。Web?模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/span>
  7.?Spring?MVC?框架:MVC?框架是一個(gè)全功能的構(gòu)建?Web?應(yīng)用程序的?MVC?實(shí)現(xiàn)。通過(guò)策略接口,MVC?框架變成為高度可配置的,MVC?容納了大量視圖技術(shù),其中包括?JSPVelocityTiles、iText?和?POI。

  ?Spring?框架的功能可以用在任何?J2EE?服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring?的核心要點(diǎn)是:支持不綁定到特定?J2EE?服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問(wèn)對(duì)象。毫無(wú)疑問(wèn),這樣的對(duì)象可以在不同?J2EE?環(huán)境?(Web?或?EJB)、獨(dú)立應(yīng)用程序、測(cè)試環(huán)境之間重用。??

????????

總結(jié)起來(lái),Spring有如下優(yōu)點(diǎn):  

1.低侵入式設(shè)計(jì),代碼污染極低  

2.?獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)Write?Once,Run?Anywhere的承諾  

3.SpringDI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性  

4.Spring并不完全依賴于Spring,開(kāi)發(fā)者可自由選用Spring框架的部分或全部?????

?????IOC?和?AOP:這兩個(gè)概念可以算是spring中的核心了,這兩個(gè)概念非常抽象,并且也不容易理解,所以我們下面來(lái)簡(jiǎn)單來(lái)描述一下這兩個(gè)概念。
  ??控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器?(在?Spring?框架中是?IOC?容器)?負(fù)責(zé)將這些聯(lián)系在一起。在典型的?IOC?場(chǎng)景中,容器創(chuàng)建了所有對(duì)象,并設(shè)置必要的屬性將它們連接在一起,決定什么時(shí)間調(diào)用方法。下表列出了?IOC?的一個(gè)實(shí)現(xiàn)模式。


類型?1

服務(wù)需要實(shí)現(xiàn)專門的接口,通過(guò)接口,由對(duì)象提供這些服務(wù),可以從對(duì)象查詢依賴性(例如,需要的附加服務(wù)),這種用的很少

類型?2

通過(guò)?JavaBean?的屬性(例如?setter?方法)分配依賴性

類型?3

依賴性以構(gòu)造函數(shù)的形式提供,不以?JavaBean?屬性的形式公開(kāi)


Spring?框架的?IOC?容器主要采用類型?2?和類型3?實(shí)現(xiàn)。

  ?面向方面的編程,即?AOP,是一種編程技術(shù),它允許程序員對(duì)橫切關(guān)注點(diǎn)或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模塊化。AOP?的核心構(gòu)造是方面,它將那些影響多個(gè)類的行為封裝到可重用的模塊中。

  AOP?和?IOC?是補(bǔ)充性的技術(shù),它們都運(yùn)用模塊化方式解決企業(yè)應(yīng)用程序開(kāi)發(fā)中的復(fù)雜問(wèn)題。在典型的面向?qū)ο箝_(kāi)發(fā)方式中,可能要將日志記錄語(yǔ)句放在所有方法和?Java?類中才能實(shí)現(xiàn)日志功能。在?AOP?方式中,可以反過(guò)來(lái)將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需要日志的組件上。當(dāng)然,優(yōu)勢(shì)就是?Java?類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用?Spring?AOP?編寫(xiě)的應(yīng)用程序代碼是松散耦合的。AOP?的功能完全集成到了?Spring?事務(wù)管理、日志和其他各種特性的上下文中。

IOC?容器:Spring?設(shè)計(jì)的核心是?org.springframework.beans?包,它的設(shè)計(jì)目標(biāo)是與?JavaBean?組件一起使用。這個(gè)包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個(gè)最高級(jí)抽象是?BeanFactory?接口,它是工廠設(shè)計(jì)模式的實(shí)現(xiàn),允許通過(guò)名稱創(chuàng)建和檢索對(duì)象。BeanFactory?也可以管理對(duì)象之間的關(guān)系。


BeanFactory?支持兩個(gè)對(duì)象模型

1.單態(tài)?模型提供了具有特定名稱的對(duì)象的共享實(shí)例,可以在查詢時(shí)對(duì)其進(jìn)行檢索。Singleton?是默認(rèn)的也是最常用的對(duì)象模型。對(duì)于無(wú)狀態(tài)服務(wù)對(duì)象很理想。
2.?原型?模型確保每次檢索都會(huì)創(chuàng)建單獨(dú)的對(duì)象。在每個(gè)用戶都需要自己的對(duì)象時(shí),原型模型最適合。
bean?工廠的概念是?Spring?作為?IOC?容器的基礎(chǔ)。IOC?將處理事情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架。正如我將在下一個(gè)示例中演示的那樣,Spring?框架使用?JavaBean?屬性和配置數(shù)據(jù)來(lái)指出必須設(shè)置的依賴關(guān)系。?

 ??????Spring的源碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。Spring框架源碼無(wú)疑是Java技術(shù)的最佳實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和應(yīng)用開(kāi)發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果。?可是從哪著手研究Spring卻是很多新手頭疼的地方,下面的參考資料將帶領(lǐng)大家慢慢的深入解析Spring?

1?Spring中的事務(wù)處理

2?ioc容器在Web容器中的啟動(dòng)

3?Spring?JDBC

4?Spring?MVC

5?Spring?AOP獲取Proxy

6?Spring聲明式事務(wù)處理

7?Spring?AOP中對(duì)攔截器調(diào)用的實(shí)現(xiàn)

8?Spring驅(qū)動(dòng)Hibernate的實(shí)現(xiàn)

9?Spring?Acegi框架鑒權(quán)的實(shí)現(xiàn)

具體的源碼解析內(nèi)容大家可以百度或者谷歌一下,可以找到大量源碼解析內(nèi)容。





總結(jié)

以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。