第一個(gè)Spring應(yīng)用- IOC

這一次,我們來寫一個(gè)基于Spring IOC的小程序,還記得IOC是什么嗎聘殖?我們?cè)賮砘仡櫼幌掳伞?br> IOC(Inversion of Control,控制反轉(zhuǎn))是Spring的核心行瑞,IOC就是由Spring來負(fù)責(zé)控制對(duì)象的生命周期和對(duì)象間的關(guān)系,IOC還有一個(gè)名字叫做“依賴注入”奸腺,這個(gè)名字比“控制反轉(zhuǎn)”好理解一點(diǎn),實(shí)際上就是將對(duì)象的生命周期交個(gè)IOC容器來統(tǒng)一管理血久,在程序需要的時(shí)候突照,IOC會(huì)吧對(duì)象注入到程序當(dāng)中,所以叫做“依賴注入”氧吐。他可以幫助我們降低代碼的耦合度讹蘑,提高開發(fā)的效率,也可以統(tǒng)一標(biāo)準(zhǔn)筑舅。

可能還是有一些抽象座慰,現(xiàn)在我們來編寫一個(gè)IOC的小例子,讓你更清晰的理解它翠拣。

例子:一個(gè)人在早上想吃橘子 版仔, 到了晚上想吃蘋果,我們要在他想吃蘋果的時(shí)候給他蘋果误墓,想吃橘子的時(shí)候給他橘子
  • 首先我們?cè)贓clipse中建立一個(gè)java Project
  • 然后引入jar蛮粮,因?yàn)檫@次我們只用到IOC容器,所以只需要3個(gè)包就可以谜慌,一個(gè)是core然想,beans還有一個(gè)依賴包c(diǎn)ommons-logging
需要引入的Spring jar包

然后我們開始設(shè)計(jì)程序,我們建立一個(gè)Ieat接口畦娄,里面有eat方法又沾,然后編寫他的兩個(gè)實(shí)現(xiàn)類弊仪,吃蘋果的類和吃橘子的類,然后我們?cè)俳⒁粋€(gè)Person類杖刷,聲明一個(gè)leat的對(duì)象(不需要實(shí)例化)励饵,這時(shí),我們使用SpringIOC 容器滑燃,利用配置文件的方式役听,根據(jù)需要(吃蘋果還是橘子)來實(shí)例化leat,如下圖所示表窘。

Paste_Image.png
下面請(qǐng)看代碼
//Ieat  接口
public interface Ieat {
    String eat();
}

//吃蘋果的類典予,實(shí)現(xiàn)Ieat接口
public class EatApple implements Ieat {
    @Override
    public String eat() {
        return "吃蘋果!";
    }
}

//吃橘子的類乐严,實(shí)現(xiàn)Ieat接口
public class EatOrange implements Ieat {
    @Override
    public String eat() {
        return "吃橘子瘤袖!";
    }
}
//Person類
public class Person {
    Ieat eat;
    public String eat(){
        return eat.eat();
    }
    public Ieat getEat() {
        return eat;
    }
    public void setEat(Ieat eat) {
        this.eat = eat;
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
        <!--這是吃橘子的Bean -->
    <bean id="eatOrange" class="it.spring.liao.com.EatOrange"></bean>
        <!--這是吃蘋果的Bean -->
    <bean id="eatApple" class="it.spring.liao.com.EatApple"></bean>
    <bean id="person" class="it.spring.liao.com.Person">
        <!-- 這里我們注入的是吃橘子的bean-->
        <property name="eat" ref="eatOrange"/>
    </bean>
</beans>

//主函數(shù)
public class Main {
    public static void main(String arg[]) {
        // 我們使用FileSystemResource獲取配置文件(關(guān)于Resource 我們以后我詳細(xì)講解)
               //讀取配置文件,啟動(dòng)Spring IOC容器
        Resource r = new FileSystemResource("eat.xml");
        BeanFactory f = new XmlBeanFactory(r);
        //獲取使用bean的id獲取Person
        Person person = (Person) f.getBean("person");
        //調(diào)用eat方法
        String s = person.eat();
        System.out.println(s);
    }
}

現(xiàn)在我們運(yùn)行一下主函數(shù)

控制臺(tái)輸出的結(jié)果

現(xiàn)在我們更改一下配置文件昂验,將注入的吃橘子bean換成 吃蘋果的bean
<property name="eat" ref="eatOrange"/> -------------><property name="eat" ref="eatApple"/>

然后再運(yùn)行一下代碼捂敌,已經(jīng)變成吃蘋果了。既琴。我們發(fā)現(xiàn)Person類的eat屬性已經(jīng)是eatApple類的對(duì)象了


控制臺(tái)輸出的結(jié)果

到這占婉,這個(gè)例子就結(jié)束了,在這個(gè)例子中甫恩,我們只需要更改Spring配置文件逆济,就可以改變Person類的eat屬性值。其中主函數(shù)的 Resource r = new FileSystemResource("eat.xml"); 就是讀取配置文件磺箕,啟動(dòng)IOC容器奖慌,此時(shí)Spring會(huì)會(huì)將eat.xml里面配置的bean掃描并實(shí)例化相應(yīng)的bean。將eatOrange類的實(shí)例化對(duì)象付給person類的eat屬性松靡。
到這里你應(yīng)該了解:
1.如何搭建Spring的基礎(chǔ)開發(fā)環(huán)境
2.Spring開發(fā)jar包的初步了解
3.如何創(chuàng)建IOC程序的實(shí)力

接下來升薯,我們將詳細(xì)分析IOC容器,并介紹他的原理击困,并且自己寫一個(gè)簡(jiǎn)單地IOC容器,敬請(qǐng)期待吧广凸!

結(jié)束阅茶,不足請(qǐng)指教

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谅海,隨后出現(xiàn)的幾起案子脸哀,更是在濱河造成了極大的恐慌,老刑警劉巖扭吁,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撞蜂,死亡現(xiàn)場(chǎng)離奇詭異盲镶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝌诡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門溉贿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浦旱,你說我怎么就攤上這事宇色。” “怎么了颁湖?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵宣蠕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我甥捺,道長(zhǎng)抢蚀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任镰禾,我火速辦了婚禮皿曲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羡微。我一直安慰自己谷饿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布妈倔。 她就那樣靜靜地躺著博投,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盯蝴。 梳的紋絲不亂的頭發(fā)上毅哗,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音捧挺,去河邊找鬼虑绵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闽烙,可吹牛的內(nèi)容都是我干的翅睛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼黑竞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捕发!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起很魂,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤扎酷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后遏匆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體法挨,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谁榜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凡纳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窃植。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惫企,靈堂內(nèi)的尸體忽然破棺而出撕瞧,到底是詐尸還是另有隱情,我是刑警寧澤狞尔,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布丛版,位于F島的核電站,受9級(jí)特大地震影響偏序,放射性物質(zhì)發(fā)生泄漏页畦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一研儒、第九天 我趴在偏房一處隱蔽的房頂上張望豫缨。 院中可真熱鬧,春花似錦端朵、人聲如沸好芭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舍败。三九已至,卻和暖如春敬拓,著一層夾襖步出監(jiān)牢的瞬間邻薯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工乘凸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厕诡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓营勤,卻偏偏與公主長(zhǎng)得像灵嫌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葛作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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