控制反转IoC(Inversion of Control)
2017-12-10 14:24
459 查看
基本介绍
IoC同DI(依赖注入),是同一个概念不同角度的描述。IoC是不在对象中直接控制自己设计的对象,而是交给容器(比如Service对象?)。了解IoC概念,同名,我们必须了解:1.谁控制了谁的什么;2.为何反转、在哪些方面反转了。1.谁控制了谁的什么
传统程序在程序内部通过new创建 程序/此对象 所依赖的对象对象,而IoC有专门的容器创建这些对象。即IoC容器控制对象的创建,控制了外部资源的获取(不仅限对象,也包括文件等);
2.为何反转,哪些方面反转了
正转指传统程序通过主动控制直接获取寄来的对象。反转则是由容器来创建并注入以来的对象——之所以是反转,是因为程序是被动的接受以来的对象,而容器帮程序查找及注入以来的对象。以来对象的获取被反转了。
3.传统程序和IoC程序结构对比图;
IoC思想:能做什么
IoC(控制反转)是一种思想,指导程序员设计出松耦合的程序。传统程序在类内部穿件所依赖的对象,导致类之间高耦合。IoC容器将查找和创建所依赖的对象的控制权都交给了容器,由容器进行诸如类所依赖的对象的组合。类之间是松耦合的,这样也方便测试。IoC所谓反转就是从思想上发生了主从换位的变化——原本程序进行获取所有资源的行动,而在IoC中,应用程序则被动等待IoC创建其所以来的资源。
依赖注入实例
IoC在Spring中成为DI(Dependencies Injection),汇总《Spring实战》中部分实例并稍作拓展。1.构造器注入
传统程序解决对象之间依赖关系为,在一个类中需要另外一个类时直接new创建。一个类中有另外一个类的具体实现,紧耦合。构造器注入为构造器传参一个所依赖的接口,不与特定的类绑定。实例如下:
//如下也展示了OO的设计原则:面向接口编程,而非具体实现 public class DarkKnight implements Knight{ private Quest quest;//Quest是接口; public DarkKnight (Quest quest){ this.quest=quest;//这里不予具体的类绑定 } public void embarkQuest(){ quest.embark(); } }
而Quest与DarkKnight之间的协作——创建应用组件之间的协作,Spring中称之为装配(wiring)。Spring有三种实现的方式:
1. xml配置;
2. java配置;
3.@Autowired自动装配;
示例java配置
@Configuration public class KnightConfig{ @Bean public Knight knight(){ return new DarkKnight(quest());//参数类型为接口,返回类型为Knight的子类 } @Bean public Quest quest(){ return new XXXQuest(); } }
拓展
spring中有多种依赖注入和装配的方式,依赖注入诸如构造器注入、set注入、静态工厂方法注入和实例注入等。装配方式最常用的有@Autowired。@Autowired使用时,首先要创建可悲扫描的bean(使用Component注解标记类);然后启动主键扫描,使用@Configuration和@ComponentScan。
这些以后都要熟悉。
相关文章推荐
- IOC-Inversion of Control, Dependency Injection
- Inversion of Control (IoC 控制反转)
- Inversion of Control (IoC) and Dependency Injection
- 控制反转(Inversion of Control)与依赖注入(Dependency Injection)
- 关于IOC(Inversion of Control)
- 胡扯IoC(Inversion of Control)
- 4000 IoC(Inversion of Control)的主要组件和注入方式
- 自己对IoC(Inversion of Control)的理解
- 控制反转(Inversion of Control)之我的理解
- 控制反转(Inversion of Control)
- 从简单实例了解Spring的控制反转IoC(Inversion of Control)
- Spring (一) IOC ( Inversion Of Control )
- 分析Autofac如何实现Controller的Ioc(Inversion of Control)
- Spring的IOC(控制反转Inversion of Control)
- 控制反转 IOC (Inversion of Control)
- 控制反转(Inversion of Control,IoC)简介
- spring ioc(Inversion of Control) 和 Aop 总结
- Ioc之我见(Inversion of Control)
- IOC 控制反转(Inversion of Control,英文缩写为IoC)
- 分析Autofac如何实现Controller的Ioc(Inversion of Control)