控制反转IoC(Inversion of Control)

10 篇文章 0 订阅
4 篇文章 0 订阅
基本介绍

  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。
  这些以后都要熟悉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值