当前位置: 首页 > ai >正文

Spring 的依赖注入DI是什么?

口语化答案

好的,面试官,依赖注入(Dependency Injection,简称DI)是Spring框架实现控制反转(IoC)的主要手段。DI的核心思想是将对象的依赖关系从对象内部抽离出来,通过外部注入的方式提供给对象。这样,依赖对象的创建和管理由Spring容器负责,而不是由对象自身负责,使得代码更加模块化、松耦合和易于测试。

题目解析

重点题,三大概念之一。di,ioc,aop 之一,大家一定要整明白。

面试得分点

构造函数,setter,注解

详细答案

在传统编程中,一个对象通常会自己创建它所依赖的其他对象。这种方式使得代码紧密耦合,不利于维护和测试。依赖注入通过将依赖关系从代码中移除,转而由外部容器(如Spring容器)来注入,从而实现了对象之间的松耦合。

依赖注入的类型

Spring框架主要提供了三种依赖注入的方式:

构造函数注入:

通过构造函数将依赖对象传递给被依赖对象。

public class Service {private final Repository repository;public Service(Repository repository) {this.repository = repository;}
}

Setter方法注入:

通过Setter方法将依赖对象注入到被依赖对象中。

public class Service {private Repository repository;public void setRepository(Repository repository) {this.repository = repository;}
}

字段注入:

直接在字段上使用注解进行注入。

public class Service {@Autowiredprivate Repository repository;
}

依赖注入的配置方式

XML配置:

通过XML文件定义Bean及其依赖关系。

<beans><bean id="repository" class="com.example.Repository"/><bean id="service" class="com.example.Service"><constructor-arg ref="repository"/></bean>
</beans>

@Configuration+@Bean注解配置:

通过Java类和注解定义Bean及其依赖关系。

@Configuration
public class AppConfig {@Beanpublic Repository repository() {return new Repository();}@Beanpublic Service service() {return new Service(repository());}
}

@Component+@Autowired注解配置:

通过注解(如@Component,@Autowired)自动扫描和注入Bean。

@Component
public class Repository {
}@Component
public class Service {@Autowiredprivate Repository repository;
}

http://www.xdnf.cn/news/17042.html

相关文章:

  • Starrocks中的 Query Profile以及explain analyze及trace命令中的区别
  • 力扣经典算法篇-43-全排列(经典回溯问题)
  • SpringCloud学习------Gateway详解
  • 数据结构 | 树的秘密
  • WPF 与 Winform :Windows 桌面开发该用谁?
  • 剖析 DC - DC 电路 SW 节点铺铜面积大小的利弊
  • Redis集群模式下确保Key在同一Slot的实现方法
  • 依托CGA匹兹堡睡眠质量指数,优化老年睡眠干预方案​
  • 【面试场景题】日志去重与统计系统设计
  • 复制网页文字到Word、WPS文字?选中后直接拖放
  • PowerShell 入门2: 使用帮助系统
  • Apifox使用mock模仿后端返回数据
  • 基于ZYNQ ARM+FPGA的声呐数据采集系统设计
  • Go语言 定时器
  • 数据结构---Makefile 文件(格式、文件变量、调用、伪目标)、gcc编译的四个步骤、双向链表(概念、作用、应用)
  • Android 之 Kotlin中的kapt
  • 风丘助力混合动力汽车工况测试:精准采集整车信号解决方案
  • 【Spring Cloud】-- 注册中心
  • K8S的NetworkPolicy使用教程
  • 【taro react】 ---- useModel 数据双向绑定 hook 实现
  • 12306旅游产品数据抓取:Python+API逆向分析
  • Webpack 5 Module Federation 模块共享最佳实践
  • 【学习笔记】FTP库函数学习
  • 基于铁头山羊STM32的平衡车电机转速开环闭环matlab仿真
  • [Linux]学习笔记系列 -- [arm]boot
  • 如何在 FastAPI 中优雅处理后台任务异常并实现智能重试?
  • Anthropic的商业模式与战略
  • 如何基于MQ实现分布式事务
  • 电子电气架构 ---智能电动汽车嵌入式软件开发过程中的block点
  • PostgreSQL——数据类型和运算符