這一次,我們來(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

然后我們開(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,如下圖所示。

下面請(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ù)

現(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ì)象了

到這,這個(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)指教