控制反转 (IoC) 和依赖注入 (DI)
IoC(Inverse of Control, 控制反转)是一种解耦的设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring 框架来管理。它的主要目的是借助于“第三方”(Spring 中的 IOC 容器) 实现具有依赖关系的对象之间的解耦(IOC 容器管理对象,只管使用即可),从而降低代码之间的耦合度。IOC 是一个原则,不是一个模式。
IoC 在其他语言中也有应用,并非 Spring 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。

将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 **IoC 容器就像是一个工厂一样,当需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。**IoC 容器负责创建对象,将对象连接在一起,配置这些对象,并从创建中处理这些对象的整个生命周期,直到它们被完全销毁。
Spring 时代一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。
Spring IoC的初始化过程:

在实际项目中一个 Service 类如果有几百甚至上千个类作为它的底层,如果需要实例化这个 Service,每次都要搞清这个 Service 所有底层类的构造函数。如果利用 IOC 的话,只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。
控制反转怎么理解呢? 举个例子:“对象a 依赖了对象 b,当对象 a 需要使用 对象 b的时候必须自己去创建。但是当系统引入了 IOC 容器后, 对象 a 和对象 b 之间就失去了直接的联系。这个时候,当对象 a 需要使用对象 b 的时候,可以指定 IOC 容器去创建一个对象 b 注入到对象 a 中”。 对象 a 获得依赖对象 b 的过程,由主动行为变为了被动行为,控制权翻转,这就是控制反转名字的由来。
DI(Dependecy Inject,依赖注入)是实现控制反转的一种方式,依赖注入就是将实例变量传入到一个对象中去。
AOP 与 IOC 实现原理
IOC: 控制反转。IOC 利用 java 反射机制,将对象交给容器管理,只需要在 spring 配置文件中配置对应的 bean 以及设置相关的属性,让 spring 容器来生成类的实例对象以及管理对象。在 spring 容器启动的时候,spring 会把在配置文件中配置的 bean 都初始化好,然后在需要调用的时候,就把它已经初始化好的那些 bean 分配给需要调用这些 bean 的类。
AOP: 面向切面编程。(Aspect-Oriented Programming) 。AOP 可以说是对 OOP 的补充和完善。OOP 引入封装、继承和多态等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。AOP 利用代理模式,实现 AOP 的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理。
本文深入探讨了Spring框架中的控制反转(IoC)和依赖注入(DI)设计思想。IoC通过反转对象创建的控制权,降低了代码间的耦合度,而DI则是其实现方式之一。Spring的IoC容器通过XML或注解配置管理对象,简化了对象实例化和依赖关系的管理,增强了项目的可维护性和开发效率。AOP则提供了面向切面编程的能力,进一步补充和完善了面向对象编程的特性。

952

被折叠的 条评论
为什么被折叠?



