IOC全稱控制反轉(Inversion of Control)
IOC是什麼
我們以一個故事來介紹IOC。
一天,你想喝杯果汁。你該怎麼做?按照正常的搞法是去買杯果汁或者自己做杯果汁放入自己的杯子裏,然後你就可以開始喝了。也就是
Juice juice = new Juice(400,"orange");
juice.drink();
但是,我們的IOC就不同了,他的理念是:讓別人爲你服務
你只需要將果汁杯擺在那,然後別人就會給他倒好果汁,你只需要喝就行了。
public class People {
private Juice juice;
@Test
public void test(){
juice = new Juice(400,"orange");
juice.drink();
}
public People(Juice juice) {
this.juice = juice;
}
}
IOC的幾種依賴注入方式
(即怎麼把他管理的“類”倒到你的杯子裏)
1、構造方法注入
public People(Juice juice) {
this.juice = juice;
}
這就好比你一進門,爲你服務的人就已經根據你之前設定好了的給你倒好了果汁
2、setter方法注入
這個怎麼寫就不多說了,直接在代碼中設置一個對應的setter方法就行了。就好比你進了門把杯子一擺,說要喝什麼果汁就喝什麼果汁
3、接口注入
不怎麼用了,不再多囉嗦。個人覺得你們也沒必要多研究這個。
IOC的類的管理
這裏的爲你服務的人我們在spring中稱爲IOC Service Provider。他的職責是:業務對象的構建管理和業務對象間的依賴綁定。
這個服務的人可不是天上派下來爲你服務的,就好比你想享受就得去請個保姆(創建applicationContext.xml文件)。
你請了保姆之後她可不知道你給她個眼神是想讓她幹什麼,這個時候你得先告訴她你的每個眼神對應的是什麼(依賴對象的綁定,如下文)
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="juice" class="ioc.Juice">
<property name="capacity" value="400"/>
<property name="flavor" value="orange"/>
</bean>
<bean id="people" class="ioc.People">
<constructor-arg name="juice" ref="juice"/>
</bean>
</beans>