Ioc-Spring-简介

Ioc容器

内容大纲

本文主要讲述Ioc容器和DI相关的概念以及区别

Ioc是什么?

DI是什么?

Ioc为什么叫控制反转?控制了什么?反转了什么?

Di为什么叫依赖注入?依赖了什么?注入了什么?

Ioc

简介

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递(注入)给它。

IOC不是什么技术,而是一种设计思想

既然IOC是控制反转,那控制了什么反转了什么

控制:传统Java开发中,我们都是主动在类中创建依赖的对象,是程序主动去创建依赖对象;而在IoC中有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建。即创建和查找依赖对象的控制权交给了IoC容器

反转:类获取依赖对象的方式不在是主动new,而是想IoC容器获取,即获得依赖对象的过程被反转

实现方法

实现控制反转主要有两种方式:依赖注入和依赖查找。两者的区别在于,前者是被动的接收对象,在类A的实例创建过程中即创建了依赖的B对象,通过类型或名称来判断将不同的对象注入到不同的属性中,而后者是主动索取相应类型的对象,获得依赖对象的时间也可以在代码中自由控制。

依赖注入

简介

DI—Dependency Injection,即依赖注入组件之间依赖关系由容器在运行期决定,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

参考 Martin Fowler文章

理解DI的关键是:谁依赖谁,为什么需要依赖,谁注入谁,注入了什么

  • 谁依赖谁:当然是应用程序依赖于IoC容器

  • 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

  • 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

IoC和DI之间有什么关系呢?Ioc着重强调的是对象创建和获取的控制,而DI着重强调的是

依赖注入实现方式:

  • 基于接口。实现特定接口以供外部容器注入所依赖类型的对象。
  • 基于set方法。实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。
  • 基于构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。
  • 基于注解。基于Java的注解功能,在私有变量前加“@Autowired”等注解,不需要显式的定义以上三种代码,便可以让外部容器传入对应的对象。该方案相当于定义了public的set方法,但是因为没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的接口(因为set方法只想让容器访问来注入而并不希望其他依赖此类的对象访问)。

Ioc-Spring-简介
https://chenmc.cn/2019/09/09/spring/01-spring-introduction/
作者
better
发布于
2019年9月9日
许可协议