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

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

Spring核心概念

  • 什么是IoC(Inversion of Control)
    • 代码现状
    • 存在问题——耦合度过高
    • 解决方案
    • IoC——控制反转
  • Spring实现IoC
    • IoC容器
    • Bean
    • DI (Dependency Injection)——依赖注入
  • 总结
    • 目标:充分解耦
      • 1、IoC
      • 2、DI
    • 最终效果


什么是IoC(Inversion of Control)

代码现状

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

Spring核心——控制反转(IoC)、依赖注入(DI)_第1张图片

存在问题——耦合度过高

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

Spring核心——控制反转(IoC)、依赖注入(DI)_第2张图片

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

解决方案

既然是因为写了该实现导致耦合度偏高,那就不写?
Spring核心——控制反转(IoC)、依赖注入(DI)_第3张图片
此时的业务层代码:

public class UserServiceImpl implements UserService {

    private UserDao userDao;

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

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

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

IoC——控制反转

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

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


Spring实现IoC

IoC容器

spring提供了一个容器,成为IOC容器,也就是IOC思想中的“外部”
Spring核心——控制反转(IoC)、依赖注入(DI)_第4张图片

Bean

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

DI (Dependency Injection)——依赖注入

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

在之前的业务代码中,service运行是依赖dao对象的,仅仅造了service对象依旧无法运行。
既然service与dao之间存在依赖关系(并不是随便将几个对象绑定,而是它们之间存在依赖关系),而它俩又都在IOC容器中。
Spring核心——控制反转(IoC)、依赖注入(DI)_第5张图片

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

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

总结

目标:充分解耦

1、IoC

使用IOC容器管理bean

2、DI

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

最终效果

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

你可能感兴趣的:(Java,spring,java,后端)