当前位置: 首页> 教育> 幼教 > Spring——控制反转(IOC)与依赖注入(DI)

Spring——控制反转(IOC)与依赖注入(DI)

时间:2025/8/28 6:31:06来源:https://blog.csdn.net/qq_45902692/article/details/141690210 浏览次数:0次

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Maven概念、IDEA集成、Maven坐标、依赖配置、依赖传递、排除依赖、依赖范围、生命周期
请求响应请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果)

文章目录

    • 前言
    • 三层架构
    • 分层解耦
    • 控制反转(IOC)与依赖注入(DI)
    • IOC 详解
    • DI 详解
    • 总结

前言

大家好,这里是前端杂货铺。

本篇文章我们学习 Spring 的关键技术 => 控制反转(IOC)和 依赖注入(DI)。


三层架构

在这里插入图片描述

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
service:业务逻辑层,处理具体的业务逻辑。
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。


分层解耦

内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。

软件设计原则:高内聚低耦合。


控制反转(IOC)与依赖注入(DI)

控制反转(IOC):对象的创建控制权由程序自身转移到外部(容器),这种思想成为控制反转。
依赖注入(DI):容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean 对象:IOC容器中创建、管理的对象,称之为 bean。

Service层 及 Dao层的实现类,交给 IOC 容器管理。
为 Controller 及 Service 注入运行时,依赖的对象。

@Component 注解:将当前类交给 IOC 容器管理,成为 IOC 容器中的 bean —— 控制反转
@AutoWired 注解:运行时,IOC 容器会提供该类型的 bean 对象,并赋值给该变量 —— 依赖注入

在这里插入图片描述

在这里插入图片描述


IOC 详解

要把某个对象交给 IOC 容器管理,需要在对应的类上加上如下注解之一:

注解位置
@Component声明 bean 的基础注解,不属于以下三类时,使用此注解
@Controller@Component 的衍生注解,标注在控制器类上
@Service@Component 的衍生注解,标注在业务类上
@Repository@Component 的衍生注解,标注在数据访问类上(由于与 mybatis 整合,用的少)

注意事项:

  • 声明 bean 时,可以通过 value 属性指定 bean 的名字,如果没有指定,默认为类名(首字母小写)。
  • 使用以上四个注解都可以声明 bean,但是 springboot 集成 web 开发中,声明控制器 bean 只能用 @Controller。

DI 详解

@Autowired 注解,默认是按照类型进行,如果存在多个相同类型的 bean,就会报一下错误:

在这里插入图片描述

解决方案如下:

在这里插入图片描述


总结

在Java中,AOP(面向切面编程)、IOC(控制反转)和DI(依赖注入)是三个重要的概念,它们在软件开发和架构设计中扮演着不同的角色。

概念描述关注点
AOP(面向切面编程)面向切面编程是一种编程范式,它允许开发者将横切关注点(如日志、事务管理等)从业务逻辑中分离出来,并通过切面的方式统一处理。- 横切关注点:将跨越多个模块或类的关注点提取出来。 - 切面:定义横切关注点的模块化单元。 - 增强:在目标方法执行前后添加的代码,如日志记录、事务管理等。
IOC(控制反转)控制反转是一种设计原则,用于降低代码之间的耦合度。在IOC中,对象的创建和生命周期管理不再由对象本身控制,而是由外部容器(如Spring容器)负责。- 依赖关系的反转:传统上,对象A依赖于对象B时,A会主动创建B的实例。在IOC中,A不再负责B的创建,而是由外部容器创建B并将其注入到A中。 - 容器:负责对象的创建、配置、组装和管理。
DI(依赖注入)依赖注入是IOC的一种具体实现方式。在DI中,对象的依赖关系不是通过对象内部硬编码的方式实现,而是通过外部容器在运行时动态地注入到对象中。- 注入方式:包括构造函数注入、设值方法注入和接口注入等。 - 依赖的透明性:对象不需要知道其依赖的具体实现,只需声明依赖即可。 - 灵活性:依赖关系可以在运行时动态地改变,而无需修改代码。
  • AOP 关注于横切关注点的模块化,通过切面来增强业务逻辑的功能。
  • IOC 是一种设计原则,用于降低代码之间的耦合度,通过外部容器来管理对象的生命周期和依赖关系。
  • DI 是 IOC 的一种具体实现方式,通过动态地将依赖注入到对象中来实现对象之间的解耦。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. JavaWeb开发(bilibili-黑马程序员)
  2. 菜鸟教程–Java

在这里插入图片描述


关键字:Spring——控制反转(IOC)与依赖注入(DI)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: