spring IOC和DI详解

IOC(控制反转)是指对象的创建和管理由容器负责,而不是对象自身。DI(依赖注入)是IOC的一种实现方式,通过容器在运行时为对象注入其依赖。这种方式降低了对象间的耦合度,提高了代码的灵活性。Spring框架是实现IOC和DI的典型例子,支持构造函数和属性注入,利用反射和动态代理技术完成对象的创建和依赖注入。
摘要由CSDN通过智能技术生成

IOC是什么?

IOC即“控制反转”,控制的什么被反转了?就是:获得依赖对象的方式反转了。

现在有一个场景,我们需要用到一个用户类,同时需要用到与用户类有依赖关系的用户信息类,传统程序设计和使用IOC后的设计有什么区别呢?

下面借两张图来说明这个问题:
在这里插入图片描述

图1-1 传统应用程序示意图

在传统程序设计我们肯定需要先创建一个用户类,然后在用户类内部new一个用户信息类,建立它们的依赖关系,两个对象间的耦合度高。

在这里插入图片描述

图1-2有IoC/DI容器后程序结构示意图

而在使用IOC容器后,用户类和用户信息类的创建和管理都会交给IOC容器来做,而且在创建用户类时会判断出是否有其他依赖对象需要注入,如何有,则将该依赖对象注入用户类中,这里用户类需要注入的依赖对象就是用户信息类,这样设计能降低对象间的耦合度。

所有的类都会在spring容器中登记,,所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

DI是什么?

spring容器创建实例对象时会根据依赖关系注入依赖对象以及属性,这就是依赖注入。

Spring支持构造函数注入和属性注入。 构造函数注入:在构造函数注入中,我们通过调用类的构造函数,将接口实现类通过构造函数变量传入。 属性注入:属性注入可以有选择地通过Setter方法完成调用类所需依赖的注入。

DI是通过动态代理和反射的方式实现的。
关于反射的概念可以参考:Java反射机制详解

在这里插入图片描述

参考文章:
https://www.cnblogs.com/xdp-gacl/p/4249939.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值