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

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

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

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

然后我們開(kāi)始設(shè)計(jì)程序,我們建立一個(gè)Ieat接口,里面有eat方法,然后編寫(xiě)他的兩個(gè)實(shí)現(xiàn)類(lèi),吃蘋(píng)果的類(lèi)和吃橘子的類(lèi),然后我們?cè)俳⒁粋€(gè)Person類(lèi),聲明一個(gè)leat的對(duì)象(不需要實(shí)例化),這時(shí),我們使用SpringIOC 容器,利用配置文件的方式,根據(jù)需要(吃蘋(píng)果還是橘子)來(lái)實(shí)例化leat,如下圖所示。

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

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

//吃橘子的類(lèi),實(shí)現(xiàn)Ieat接口
public class EatOrange implements Ieat {
    @Override
    public String eat() {
        return "吃橘子!";
    }
}
//Person類(lèi)
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>
        <!--這是吃蘋(píng)果的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換成 吃蘋(píng)果的bean
<property name="eat" ref="eatOrange"/> -------------><property name="eat" ref="eatApple"/>

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


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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容