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