開(kāi)始學(xué)習(xí)-Spring 學(xué)習(xí)筆記一

一.spring的框架結(jié)構(gòu)



IOC(Inversion of Control控制反轉(zhuǎn)):傳統(tǒng)的方法是組件(一個(gè)個(gè)類(lèi))向容器獲取自己所需要的資源(依賴(lài)的類(lèi))泽腮,容器返回所需要的類(lèi)給它褐墅⌒梢辏控制反轉(zhuǎn)(IOC)實(shí)現(xiàn)的方法是偿凭,容器先把所有資源收集起來(lái)(首先你需要注冊(cè)了這些資源(bean)),收集起來(lái)之后就需要整理這些資源之間的依賴(lài)關(guān)系魂迄,這樣我才能知道你需要啥,我才能給你這些東西。最后容器就將不同組件所需要的資源送給他們橱健,而你要做的僅僅是選擇一種合適方式來(lái)接受我給你的資源。

DI(Dependency Injection依賴(lài)注入):我們的組件需要以一種什么樣的方式來(lái)接受你給的資源呢贞远?通常我們會(huì)使用事先定義好的set方法來(lái)對(duì)資源進(jìn)行注入畴博。

DL(Dependency Lookup依賴(lài)查找):這個(gè)當(dāng)前實(shí)體主動(dòng)去尋找某個(gè)服務(wù)注冊(cè)地查找其依賴(lài)的那些服務(wù)。

spring的三種依賴(lài)注入方式:

第一種:屬性注入(下面的案例就是)蓝仲,屬性注入就是通過(guò)set方法注入bean的屬性值或依賴(lài)對(duì)象俱病,屬性注入使用xml中的<property>元素,name屬性用來(lái)指定bean 的屬性名稱(chēng)袱结,value用來(lái)指定屬性的值亮隙。這種為最常用的方式。(后期通過(guò)javaConfig的形式來(lái)進(jìn)行收集和注冊(cè)垢夹,不在是使用xml文件)溢吻。

第二種:構(gòu)造器注入,就是通過(guò)使用構(gòu)造方法注入bean的屬性值還有依賴(lài)對(duì)象,直接保證在bean實(shí)例化之后可以使用促王。在xml中<constructor-tag>元素里面聲明犀盟,沒(méi)有name屬性。

第三種:工廠的方式注入蝇狼,很少使用所以不提阅畴。另一種字面值注入,字面值的意思就是可以用字符串表示的值迅耘〖妫基本數(shù)據(jù)類(lèi)型及其封裝類(lèi)、String等類(lèi)型都可以采取字面值注入的方式颤专。若字面值中包含特殊字符纽哥,可以使用把字面值包裹起來(lái)。

舉個(gè)例子:我們需要準(zhǔn)備的以下類(lèi),所需要的資源和組件

// 接口? HelloWorld? 【資源】

public interface HelloWorld{

? ? ? public void sayHello();

}

//繼承 HelloWorld接口的實(shí)現(xiàn)類(lèi) ?('"控制臺(tái)輸出Spring say Hello!") ?【資源】

public class SpringHelloWorld implements HelloWorld {

? ? ? ?public void sayHello()? {

? ? ? ? ? System.out.println("Spring say Hello!");

? ? ? ? }

}

// 繼承 HelloWorld接口的實(shí)現(xiàn)類(lèi)? ('"控制臺(tái)輸出Structs2 say Hello!") 【資源】

public class StrutsHelloWorld ?implements HelloWorld {

? ? ? public void sayHello()? {

? ? ? ? ? ? ? ? System.out.println("Structs2 say Hello!");

? ? ? }

}

//? 以上兩個(gè)類(lèi)都繼承同一個(gè)接口栖秕,方法里的具體實(shí)現(xiàn)不同? 【組件】

// 服務(wù)類(lèi) HelloWorldService

public class HelloWorldService { ??

// 定義一個(gè)HelloWorld接口類(lèi)型的變量

? ? ? ?private HelloWorld helloWorld;

// 構(gòu)造函數(shù) HelloWorldService

? ? ? ?public HelloWorldService()? {

? ? ? ?}

//重點(diǎn)? 我們需要 定義get,set方法 春塌,使得spring 框架中的 IOC (控制反轉(zhuǎn)) 能夠?qū)elloWorldService 進(jìn)行管理

? ? ? public void setHelloWorld(HelloWorld helloWorld) {

? ? ? ? ? ? this.helloWorld = helloWorld;

? ? }

? ? ? public HelloWorld getHelloWorld() {

? ? ? ? ? ? return this.helloWorld;

? ? ?}

}


//我們需要對(duì)HelloWorldService 和HelloWorld 之間進(jìn)行管理 還需要借助bean.xml文件(主要功能是注冊(cè)資源,并聲明好組件之間的關(guān)系)

<beanid="springHelloWorld"

? ? ? class="com.yiibai.tutorial.spring.helloworld.impl.SpringHelloWorld"></bean>? ? <!-- springHelloWorld類(lèi)的具體所在上下文路徑-->

<beanid= " strutsHelloWorld"

? ? ? class="com.yiibai.tutorial.spring.helloworld.impl.StrutsHelloWorld"> <bean> ??

<beanid = "helloWorldService"

? ? ? class = " com.yiibai.tutorial.spring.helloworld.HelloWorldService" ? ?<!--同樣是類(lèi)的上下路徑-->

? ? ? <propertyname = "helloWorld" ,ref = "springHelloWorld"/>?

<bean>

?

propertyname 是屬性名累魔,用來(lái)聲明創(chuàng)建HelloWorldService的時(shí)候摔笤,對(duì)應(yīng)創(chuàng)建的具體類(lèi)是springHelloWorld ?。

最后是主函數(shù)的調(diào)用

// 類(lèi)HelloProgram 主方法

public class HelloProgram {

? public static void main(String[] args) {

? ? ?ApplicationContext context =

? ? ?new ClassPathXmlApplicationContext("beans.xml");? ? ? ? ? //ClassPathXmlApplicationContext使用此方法可以獲得HelloWorldService的 ? ? ? HelloWorldService service = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//路勁

? ? ?(HelloWorldService) context.getBean("helloWorldService");

? ? HelloWorld hw= service.getHelloWorld(); ? ? ? ? ?

? ? ?hw.sayHello();

? ? ?}

}

最后控制臺(tái)輸出的結(jié)果是Spring say Hello!垦写,因?yàn)樵赽ean.xml文件中聲明的是springHelloWorld類(lèi)的具體路徑


整體的工作流程:

? ? 第一步 ?主函數(shù)調(diào)用ClassPathXmlApplicationContext("beans.xml"); ?系統(tǒng)會(huì)自動(dòng)調(diào)用 IOC Container ?

? ? 第二步? ? IOC Container創(chuàng)建在beans.xml聲明的基本類(lèi)(Java bean,把注冊(cè)的bean收集起來(lái)) 這三個(gè)類(lèi)是 springHelloWorld彰触,strutsHelloWorld梯投,helloWorldService,收集起來(lái)之后况毅,就開(kāi)始整理分蓖。

? ? 第三步? 根據(jù)xml文件中聲明的<propertyname = "helloWorld" ,ref = "springHelloWorld"/> 調(diào)用helloWorldService中的set方法 把具體的實(shí)現(xiàn)類(lèi)注入到helloWorldService里面的helloWorld。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尔许,一起剝皮案震驚了整個(gè)濱河市么鹤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌味廊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漫雕,居然都是意外死亡求摇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)辉巡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恨憎,“玉大人,你說(shuō)我怎么就攤上這事憔恳≡孔椋” “怎么了腔丧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我影暴,道長(zhǎng)型宙,這世上最難降的妖魔是什么妆兑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任箱靴,我火速辦了婚禮棍矛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慨绳。我一直安慰自己厌小,他們只是感情好璧亚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布狰闪。 她就那樣靜靜地躺著幔欧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滋饲,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天崭参,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛是整,可吹牛的內(nèi)容都是我干的龙优。 我是一名探鬼主播易迹,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼句伶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了疫蔓?” 一聲冷哼從身側(cè)響起身冬,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衅胀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后酥筝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體滚躯,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年嘿歌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掸掏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宙帝,死狀恐怖丧凤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情步脓,我是刑警寧澤愿待,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布浩螺,位于F島的核電站,受9級(jí)特大地震影響呼盆,放射性物質(zhì)發(fā)生泄漏年扩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一访圃、第九天 我趴在偏房一處隱蔽的房頂上張望厨幻。 院中可真熱鬧,春花似錦腿时、人聲如沸况脆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)格了。三九已至,卻和暖如春徽鼎,著一層夾襖步出監(jiān)牢的瞬間盛末,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工否淤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悄但,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓石抡,卻偏偏與公主長(zhǎng)得像檐嚣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啰扛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理嚎京,服務(wù)發(fā)現(xiàn),斷路器隐解,智...
    卡卡羅2017閱讀 134,699評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,848評(píng)論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法鞍帝,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法煞茫,繼承相關(guān)的語(yǔ)法膜眠,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,662評(píng)論 18 399
  • 0080 冬天暖氣房里多喝煮出來(lái)的老白茶 摘要:冬天呆在暖氣房里很舒服溜嗜,但是空氣燥熱容易上火。每天煮點(diǎn)老白茶架谎,不但...
    白茶筆記閱讀 968評(píng)論 2 0
  • 像生活 就像你也生活在這部劇中 整部劇一直被批評(píng)沒(méi)劇情 但我反而認(rèn)為劇情的平淡更加凸顯出情感的真實(shí)與強(qiáng)烈 臺(tái)詞棒 ...
    mm刺猬mm閱讀 205評(píng)論 0 0