news 2026/5/1 2:50:17

Spring 中的 DI 是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring 中的 DI 是什么?

Spring 中的 DI(Dependency Injection,依赖注入)是 Spring 框架的核心特性之一,也是控制反转(IoC,Inversion of Control)原则的具体实现。

什么是 DI?

依赖注入是一种设计模式,它将对象的依赖关系从对象内部移到外部容器(Spring 容器)来管理。简单来说,就是由容器负责创建对象并注入它所依赖的其他对象,而不是由对象自己创建或查找依赖。

DI 的核心概念

1. 依赖关系

// 没有 DI 的情况publicclassUserService{privateUserDaouserDao;publicUserService(){// 对象自己创建依赖,耦合度高this.userDao=newUserDao();}}// 使用 DI 的情况publicclassUserService{privateUserDaouserDao;// 通过构造函数注入依赖publicUserService(UserDaouserDao){this.userDao=userDao;}}

2. 控制反转

  • 传统方式:对象自己控制依赖的创建和管理
  • DI 方式:控制权反转给 Spring 容器,由容器负责注入依赖

DI 的三种注入方式

1. 构造函数注入(推荐)

@ComponentpublicclassUserService{privatefinalUserDaouserDao;@AutowiredpublicUserService(UserDaouserDao){this.userDao=userDao;}}

2. Setter 方法注入

@ComponentpublicclassUserService{privateUserDaouserDao;@AutowiredpublicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}}

3. 字段注入(不推荐)

@ComponentpublicclassUserService{@AutowiredprivateUserDaouserDao;}

DI 的优势

  1. 降低耦合度:对象之间通过接口交互,不直接依赖具体实现
  2. 提高可测试性:可以轻松注入 Mock 对象进行单元测试
  3. 便于维护:依赖关系集中管理,修改配置即可改变实现
  4. 促进代码复用:组件可以灵活组合使用
  5. 符合单一职责原则:对象专注于自己的业务逻辑

Spring 中 DI 的实现

Spring 通过以下注解实现 DI:

  • @Component:标记类为 Spring 管理的 Bean
  • @Autowired:自动装配依赖
  • @Service@Repository@Controller:特定场景的组件注解
  • @Qualifier:指定注入的 Bean 名称
  • @Value:注入配置值

实际示例

// 定义接口publicinterfaceMessageService{StringsendMessage(Stringmessage);}// 实现类@Service("emailService")publicclassEmailServiceimplementsMessageService{publicStringsendMessage(Stringmessage){return"Email: "+message;}}@Service("smsService")publicclassSmsServiceimplementsMessageService{publicStringsendMessage(Stringmessage){return"SMS: "+message;}}// 使用依赖注入@ServicepublicclassNotificationService{privatefinalMessageServicemessageService;@AutowiredpublicNotificationService(@Qualifier("emailService")MessageServicemessageService){this.messageService=messageService;}publicvoidsendNotification(Stringmessage){System.out.println(messageService.sendMessage(message));}}

总结

DI 是 Spring 框架的基石,它通过将对象的创建和依赖管理交给容器,实现了松耦合、易测试、易维护的代码结构。在现代 Java 开发中,DI 已经成为主流的设计模式,不仅限于 Spring,在其他框架中也有广泛应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:44:18

【计算机毕业设计案例】基于springboot新农人可溯源产品销售平台基于springboot的农产品溯源系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/19 4:40:45

基于51单片机多路 四路超声波测距仪 汽车倒车雷达 防撞 报警系统

目录 系统概述硬件组成工作原理软件设计功能扩展应用场景 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统概述 基于51单片机的多路超声波测距系统(如四路)常用于汽车倒车雷达或防撞报警。该系统通过超声波…

作者头像 李华
网站建设 2026/5/1 8:34:08

Qwen3-TTS 1.7B 离线整合包

链接:https://pan.quark.cn/s/e4e555e2af9bQwen3-TTS(Text To Speech) 是由 Qwen 开发的一系列功能强大的语音生成,全面支持音色克隆、音色创造、超高质量拟人化语音生成,以及基于自然语言描述的语音控制。直接将开源T…

作者头像 李华
网站建设 2026/4/23 2:21:49

数据中台建设中的数据集成方案:CDC技术详解

数据中台建设中的数据集成方案:CDC技术详解关键词:数据中台、数据集成、CDC技术、Change Data Capture、实时数据同步摘要:本文围绕数据中台建设中的数据集成方案,深入剖析了CDC(Change Data Capture)技术。…

作者头像 李华
网站建设 2026/4/28 15:15:53

鸿蒙中级课程笔记3—ArkUI进阶3—给应用添加交互(手势)

单一手势 点击事件(onClick) 单击作为常用的手势,可以方便地使用onClick接口实现。尽管被称为事件,它实际上是基本手势类型,等同于将count配置为1的TapGesture,即单击手势。 onClick与其他手势类型相同&…

作者头像 李华
网站建设 2026/4/17 15:59:08

【车牌识别】基于计算机视觉的多雾环境停车计费系统附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

作者头像 李华