news 2026/8/10 1:24:51

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/8/9 20:59:09

【SSVEP】基于SSVEP检测频率导向脑活动的VR实验附Matlab代码

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

作者头像 李华
网站建设 2026/8/8 14:18:31

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

目录 基于51单片机的水质检测系统设计硬件组成软件设计校准与优化扩展功能 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 基于51单片机的水质检测系统设计 该系统以51单片机为核心,集成多种传感器模块,实时监…

作者头像 李华
网站建设 2026/8/5 18:11:21

Java毕设项目推荐-基于springboot的午托晚托培训机构课后服务平台小程序【附源码+文档,调试定制服务】

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

作者头像 李华
网站建设 2026/8/5 18:10:24

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

弹窗概述 弹窗一般指打开应用时自动弹出或者用户行为操作时弹出的UI界面,用于短时间内展示用户需关注的信息或待处理的操作。 从ArkUI组件树层级上来看,Overlay浮层、弹窗、模态、带Order的Overlay浮层都挂载在Root节点下。弹窗、模态、带Order的Overl…

作者头像 李华