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>