Spring依赖注入和控制反转

简介: Spring依赖注入和控制反转

问题1:什么是依赖注入和控制反转

对象依赖:有A类,B类,在A类中B类以形参的方式作为A类中的某个方法的参数,这个时候我们就可以认为A类B类是相互依赖的,即A类依赖于B类,当然在Java,C++中体现为:局部变量、方法/函数的参数或者是对静态方法的调用。

1.Java应用程序,通过各个对象协助组成,对象彼此之间相互依赖,这种方式缺乏将基本构建块组织成一个连贯的整体的方法(图1)。
在这里插入图片描述
相关学习链接:
Java语言中的关联与依赖关系
java对象间的关系(依赖,关联,组合,聚合)
Spring如何解决循环依赖问题

2.Spring 框架控制反转(IoC)组件通过提供一种形式化的方法来将不同的组件组成一个可以正常使用的应用程序,从而解决了这一问题(图2)。
在这里插入图片描述
在这里插入图片描述
3.Ioc也称为依赖注入(DI),这是一个过程,在此过程中,对象通过构造函数参数,工厂方法的参数或在对象实例从工厂方法构造或返回后设置的属性来定义其依赖关系即与它们一起使用的其他对象。然后,容器在创建Bean时注入那些依赖项。
在这里插入图片描述
回答上面的问题什么是控制反转和依赖注入:
下面的内容来源于:【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3
4.控制反转

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

对于控制反转你需要搞懂以下三个问题:
4.1 谁控制谁

传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象,这时候就是程序控制对象
而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建,这时候就是Ioc容器控制对象

4.2 控制什么

主要控制了外部资源获取(不只是对象包括比如文件等)。

4.3 正转和反转:

正转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,对象主动接受依赖对象,也就是正转

反转:由容器来帮忙创建及注入依赖对象,对象被动的接受依赖对象,所以是反转

5.依赖注入

DI—Dependency Injection,即“ 依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

对于依赖注入你需要搞懂以下四个问题:
5.1 谁依赖于谁

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

5.2 为什么需要依赖

应用程序需要IoC容器来提供对象需要的外部资源;

5.3 谁注入谁

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

5.4 注入了什么

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

最后对于控制反转和依赖注入我觉得狂神的理解方式挺不错的:
在这里插入图片描述
关于本部分的代码实例,你可以通过这篇博文进一步加深印象:Spring-IOC本质

相关文章
|
1月前
|
XML Java 测试技术
Spring Boot中的依赖注入和控制反转
Spring Boot中的依赖注入和控制反转
|
3月前
|
XML Java 程序员
Spring6框架中依赖注入的多种方式(推荐构造器注入)
依赖注入(DI)是一种过程,对象通过构造函数参数、工厂方法的参数或在对象实例构建后设置的属性来定义它们的依赖关系(即与其一起工作的其他对象)。
50 3
|
3月前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
40 0
|
17天前
|
设计模式 自然语言处理 Java
简单了解下Spring中的各种Aware接口实现依赖注入
在Spring框架中,Aware接口是一组用于提供特定资源或环境信息的回调接口。这些接口被设计用来允许Bean获取对Spring容器或其他相关资源的引用,并在需要时进行适当的处理。
15 2
|
29天前
|
缓存 Java Spring
Spring循环依赖问题之Spring不支持构造器内的强依赖注入如何解决
Spring循环依赖问题之Spring不支持构造器内的强依赖注入如何解决
|
2月前
|
设计模式 Java 测试技术
Spring Boot中的依赖注入详解
Spring Boot中的依赖注入详解
|
2月前
|
XML Java 测试技术
Spring IOC 控制反转总结
Spring IOC 控制反转总结
|
2月前
|
缓存 Java 测试技术
Spring 框架,不只是依赖注入和面向切面那么简单!
【6月更文挑战第25天】Spring框架超越DI和AOP,涵盖事务管理、数据访问抽象如`JdbcTemplate`、消息驱动支持如`@JmsListener`、缓存管理和测试工具。示例代码展示了其简化复杂性的能力,如自动事务处理、数据库操作及消息队列监听。Spring是构建高效企业级应用的全面解决方案。
28 4
|
2月前
|
Java Spring 容器
spring如何进行依赖注入,通过set方法把Dao注入到serves
spring如何进行依赖注入,通过set方法把Dao注入到serves
|
2月前
|
存储 Java 测试技术
Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性
Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性
22 1