news 2026/4/16 10:51:11

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/4/16 8:44:04

Java计算机毕设之基于springboot的种植基地农业信息管理系统的设计与实现基于springboot的农企信息管理平台设计与开发(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/4/16 10:20:58

基于51单片机的水质检测 PH 浊度 温度 蓝牙 报警

目录 基于51单片机的水质检测系统设计硬件组成模块软件设计要点系统调试注意事项扩展功能方向 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 基于51单片机的水质检测系统设计 系统概述 该系统以51单片机为核心,集成PH值传…

作者头像 李华
网站建设 2026/4/13 17:05:39

基于SpringBoot的乡村政务办公系统毕业设计源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在设计并实现一个基于SpringBoot框架的乡村政务办公系统,以提升乡村政务工作的效率与质量。具体研究目的如下: 提高政务办公…

作者头像 李华
网站建设 2026/4/16 10:21:21

DP Animation Maker(动画制作工具)

链接:https://pan.quark.cn/s/adccc0075a4cDP Animation Maker是一款动画制作工具,可以帮助用户创建动画背景,提供了众多动画特效,即使是小白用户也可以很好的制作出动画。软件特色动画视频。网页横幅。视频。数字贺卡。手机背景。…

作者头像 李华