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

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.dtcms.com/a/316057.html

相关文章:

  • ChatGPT以及ChatGPT强化学习步骤
  • 陪诊小程序开发:用科技重构就医陪伴的“温度经济”
  • K8S健康检查巡检清单
  • 【JMeter】压测脚本生成完善增强
  • 奇偶校验码原理与FPGA实现
  • Java 配置文件深度解析:application.properties 与 application.yml 全方位对比
  • 制氧机语音控制方案设计以及使用场景
  • 北京JAVA基础面试30天打卡02
  • 浮雕软件Artcam安装包百度云网盘下载与安装指南
  • Linux-Day11.WEB服务,虚拟主机
  • 布控球是什么?布控球有什么作用?什么场景下会使用到布控球设备?一篇短文带你了解
  • 人工智能之数学基础:利用全概率公式如何将复杂事件转为简单事件
  • 寿司:米粒里藏着的鲜与巧
  • Java 大视界 -- Java 大数据在智能医疗电子病历数据分析与临床决策支持中的应用(382)
  • 【测试报告】Hsu营销平台系统 - 测试报告
  • 嵌入式#define __assert __assert写法解析
  • 起落架大型结构件深孔测量探究 - 激光频率梳 3D 轮廓检测
  • 智慧会所:科技赋能,开启休闲新体验
  • 解决 Windows 下的“幽灵文件”——记一次与带空格的 .gitignore 文件的艰难斗争
  • PDF 文本提取技术深度对比:基于规则与基于模型的两种实现
  • 向量范数与矩阵范数
  • ThingsKit Edge是什么?
  • 论文阅读: Mobile Edge Intelligence for Large LanguageModels: A Contemporary Survey
  • 小杰数据结构——题库——拂衣便欲沧海去,但许明月随吾身
  • echarts在前后端分离项目中的实践与应用
  • mysql强制区分大小写进行查询用BINARY
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(四)
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制
  • Java学习第一百零六部分——Lucene
  • python开发环境安装多系统完整版