ioc,全称是Inversion of Control,字面理解叫控制反转。既然叫控制反转,那就是原来谁控制,后面转给了谁。
那着手点先从原来的“控制正转”切入,在oop中,操作的都是object基本上都是实例化、赋值属性、接口调用等。
正常object基本上是这样的:
SimpleObject simpleObject = new SimpleObject();
simpleObject.setProp("prop");
System.out.println(simpleObject.getProp());
那么“控制反转”就是把对象的实例化、属性赋值等由“自己”交给“其他人”,再spring中类似这样:
<bean id="simpleObject" class="zhangq.github.study.ioc.SimpleObject">
<property name="prop" value="prop" />
</bean>
ApplicationContext context = new ClassPathXmlApplicationContext("ioc/ioc.xml"); SimpleObject simpleObject = (SimpleObject) context.getBean("simpleObject"); System.out.println(simpleObject.getProp());
这两段代码操作结果都是:
1)实例化SimpleObject对象
2)赋值prop属性
3)输出prop属性
前者就是硬编码,后者就可以理解把动作交给某个代理来完成。
乍一看ioc有点不够直接,大神就提了个概念叫DI,即Dependency Injection-依赖注入
那么把ioc就是一种降耦合的设计思想,依赖注入当成是这种思想的一种实现就好了。
下一节:依赖注入的方式