news 2026/5/12 5:48:06

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/10 12:57:31

强烈安利9个AI论文软件,专科生轻松搞定毕业论文!

强烈安利9个AI论文软件,专科生轻松搞定毕业论文! AI 工具的崛起,让论文写作不再难 对于专科生来说,撰写毕业论文往往是一道难以逾越的门槛。从选题、查找资料到撰写初稿、反复修改,每一个环节都可能让人感到力不从心。…

作者头像 李华
网站建设 2026/5/3 5:14:43

基于51单片机的智能窗帘晾衣架 WIFI传输 防盗报警

目录基于51单片机的智能窗帘晾衣架系统概述核心功能模块硬件设计要点软件逻辑流程扩展应用场景注意事项源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于51单片机的智能窗帘晾衣架系统概述 该系统结合51单片机作为主控芯片&#xff…

作者头像 李华
网站建设 2026/5/3 8:17:45

基于51单片机的智能药盒 WIFI传输 药量检测 定时吃药

目录 功能概述硬件设计软件设计应用场景扩展功能 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 功能概述 基于51单片机的智能药盒整合了WIFI传输、药量检测和定时提醒功能,旨在帮助用户规律服药。系统通过传感器监测药量…

作者头像 李华
网站建设 2026/5/3 6:05:52

如何用tcpdump诊断tcp数据包问题

tcpdump 是网络故障排查和安全分析中最强大、最常用的工具之一。它能捕获流经网络接口的原始数据包,并提供详细的解读。 下面我将从基础使用、输出信息解读和常用命令示例三个方面为你进行解读。 1. tcpdump 基础使用 基本语法 tcpdump [选项] [过滤表达式] 常用…

作者头像 李华
网站建设 2026/5/12 0:48:07

基于51单片机定时分类自动灌溉大棚浇花系统

目录系统概述核心功能硬件组成软件设计扩展应用注意事项源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 51单片机定时分类自动灌溉大棚浇花系统是一种基于51系列单片机的智能控制系统,通过预设程序实现定时、分类灌…

作者头像 李华