Spring核心——控制反转(IoC)、依赖注入(DI)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


什么是IoC(Inversion of Control)

代码现状

编写一个业务层实现类,实现业务层接口,在里边创建数据层接口并给出数据层的实现,并调对应的操作:

在这里插入图片描述

存在问题——耦合度过高

当想要替换数据层的实现时,如:

在这里插入图片描述

一旦修改,源代码也修改,意味着需要重新编译、测试等等。
正因为在 类 里边写了其他的一些实现,便导致代码的耦合度偏高

解决方案

既然是因为写了该实现导致耦合度偏高,那就不写?
在这里插入图片描述
此时的业务层代码:

public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void save(){
        userDao.save();
    }
}

但此时程序没有实现对象,运行不起来!
那没有对象怎么办?那就外部给它一个对象

即:
使用对象时,不要主动new一个对象,而是由外部提供一个对象。

IoC——控制反转

使用对象时,从主动new创建,转换为由外部提供对象。
过程中对象的控制权由程序转移到外部。

这样的思想便成为控制反转。


Spring实现IoC

IoC容器

spring提供了一个容器,成为IOC容器,也就是IOC思想中的“外部”
在这里插入图片描述

Bean

IOC容器中存放了大量对象,它管理对象的创建、初始化等等工作,这些对象,在IOC容器中,统称Bean

DI (Dependency Injection)——依赖注入

在容器中建立bean与bean之间的依赖关系的过程

在之前的业务代码中,service运行是依赖dao对象的,仅仅造了service对象依旧无法运行。
既然service与dao之间存在依赖关系(并不是随便将几个对象绑定,而是它们之间存在依赖关系),而它俩又都在IOC容器中。
在这里插入图片描述

于是,IOC容器把service与dao之间的依赖关系绑定,这样一来,容器将service对象给过去,绑定的dao对象也有了,也可以直接使用了!

绑定关系的过程,便是依赖注入

总结

目标:充分解耦

1、IoC

使用IOC容器管理bean

2、DI

在IOC容器内将有依赖关系的bean进行关系绑定

最终效果

①使用对象时可直接从IOC容器中获取。
②获取到的bean已经绑定了所有依赖关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值