什么是IOC/DI?

一、IOC是 什么?

IOC的英文名字是Inversion of Control,IOC即“控制反转”,不是什么技术,而是一种设计思想。在Java 开发 中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

①所谓控制,指的是管理对象的权利;

②所谓反转,指的是由Spring管理而不是开发者管理

二、IOC的作用

IoC的其中一个目的是为了解耦合,当将一个对象交给第三方容器管理后,那么对象之间的耦合相较于传统 new方式会降低。同时Spring IoC也可以降低对象的管理成本,比如实现单例模式(默认即是单例)等等。

要注意的是,IoC和DI的关系并不是一个,类似于接口和实现类的区别,IoC是一种设计思想,DI是IoC 的一 种实现,DI也称为依赖注入,在Spring中可以通过@Autowired注解将Spring容器中的对象注入到指 定的位置。

三、依赖注入(DI)

(1)相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念。所谓依赖注入(Dependency Injection), 即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关 系的目标对象 实例注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方 法让容器去决定 依赖关系。

(2)Spring框架使用这种方式。依赖注入是时下最流行的IoC实现方式,依赖注入分为接口注入(Interface Injection),Setter方法注入(Setter Injection)和构造器注入(Constructor Injection)三种方式。 其中接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃。

(3)依赖注入的基本原则是:应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应 该由 IoC 容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责。容器全 权负 责组件的装配,它会把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造器传递给需 要的对象。

(4)依赖注入之所以更流行是因为它是一种更可取的方式:让容器全权负责依赖查询,受管组件只需要暴 露JavaBean的setter方法或者带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系。 其与依赖查找方式 相比,主要优势为:

1、查找定位操作与应用代码完全无关。

2、不依赖于容器的API,可以很容易地在任何容器以外使用应用对象。

3、不需要特殊的接口,绝大多数对象可以做到完全不必依赖容器。

四、IOC和DI之间的关系

依赖注入不能单独存在,需要在ioc的基础上完成操作。也就是说,只有把对象创建了,你才能向类里面注入值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值