IOC:基本概念
对于 Spring IoC 和 AOP 的理解
IoC(Inverse of Control:控制反转)是一种设计思想
就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
IoC 在其他语言中也有应用,并非 Spirng 特有。
IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。
将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。
这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。
IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,
完全不用考虑对象是如何被创建出来的。
在实际项目中一个 Service 类可能有几百甚至上千个类作为它的底层,
假如我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把人逼疯。
如果利用 IoC 的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。
Spring 时代我们一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。
Spring IoC的初始化过程:

控制反转(Inverse of Control,IOC)
有时候也被称之为依赖注入,是一种降低对象之间耦合关系的设计思想。
一般来说,在分层体系结构中,都是上层调用下层的接口,依赖注入最直接的提现,@AutoWired,@Resource这个注解,
上层调用下层的接口,上层依赖于下层的执行,也就是调用者依赖被调用者,
而通过IOC方式,是的上层不再依赖下层的接口,通过注入实例化对象来选择不同的下层实现,来是先控制反转。
采用IOC机制能过提高系统的可扩展性,如果对象之间通过显式调用进行交互会导致调用者和被调用者存在非常紧密的联系,
其中一方如果出现变动,那么系统也会进行相应的修改。
IOC优点:
- 通过IOC容器,开发人员不需要关注对象是怎么去创建的,同时增加新的类也比较方便了。
- IOC容器可以通过配置文件来确定需要注入的实例化对象,因此很方便进行单元测试。
控制反转(IoC)和依赖注入(DI)
IoC(Inversion of Control,控制翻转) 是Spring 中一个非常非常重要的概念,它不是什么技术,而是一种解耦的设计思想。
它的主要目的是借助于“第三方”(Spring 中的 IOC 容器) 实现具有依赖关系的对象之间的解耦(IOC容易管理对象,你只管使用即可),
从而降低代码之间的耦合度。
IOC 是一个原则,而不是一个模式,以下模式(但不限于)实现了IoC原则。

Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,
完全不用考虑对象是如何被创建出来的。
IOC 容器负责创建对象,将对象连接在一起,配置这些对象,并从创建中处理这些对象的整个生命周期,直到它们被完全销毁。
在实际项目中一个 Service 类如果有几百甚至上千个类作为它的底层,我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把人逼疯。
如果利用 IOC 的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。
控制翻转怎么理解呢?
举个例子:"对象a 依赖了对象 b,当对象 a 需要使用 对象 b的时候必须自己去创建。但是当系统引入了 IOC 容器后,
对象a 和对象 b 之前就失去了直接的联系。这个时候,当对象 a 需要使用 对象 b的时候,
我们可以指定 IOC 容器去创建一个对象b注入到对象 a 中"。
对象 a 获得依赖对象 b 的过程,由主动行为变为了被动行为,控制权翻转,这就是控制反转名字的由来。
DI(Dependecy Inject,依赖注入)是实现控制反转的一种设计模式,依赖注入就是将实例变量传入到一个对象中去。
参考:

浙公网安备 33010602011771号