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容器在运行期间,动态地将某种依赖关系注入到对象之中。
理解DI的关键是:谁依赖谁,为什么需要依赖,谁注入谁,注入了什么。
谁依赖谁:当然是应用程序依赖于IoC容器;
为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据);
IoC和DI之间有什么关系呢?Ioc着重强调的是对象创建和获取的控制,而DI着重强调的是
依赖注入实现方式:
- 基于接口。实现特定接口以供外部容器注入所依赖类型的对象。
- 基于
set
方法。实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。 - 基于构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。
- 基于注解。基于Java的注解功能,在私有变量前加“@Autowired”等注解,不需要显式的定义以上三种代码,便可以让外部容器传入对应的对象。该方案相当于定义了public的set方法,但是因为没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的接口(因为set方法只想让容器访问来注入而并不希望其他依赖此类的对象访问)。