首页 > 其他分享 >Ioc和DI

Ioc和DI

时间:2025-01-16 19:36:28浏览次数:1  
标签:容器 依赖 repository DI 对象 Ioc IoC

IoC
IoC 是一种设计原则,用于减少代码之间的耦合。它通过将对象的创建和管理交给外部容器(如 Spring 容器)来实现,而不是由对象自己创建或管理它们所依赖的对象。

核心思想
控制反转:应用程序不再负责对象的创建和管理,而是将这些工作交给外部容器。
依赖管理:容器负责管理对象的生命周期以及它们之间的依赖关系。

BeanFactory:Spring 容器的基础接口,负责管理 Bean 的生命周期。
ApplicationContext:BeanFactory 的扩展,提供了更多的功能,如 AOP、事件处理等。
优点
解耦:减少代码之间的直接依赖,提高代码的可维护性和可测试性。
灵活性:可以方便地替换或修改依赖的实现。

DI
DI 是实现 IoC 的一种具体方式,通过外部容器将对象的依赖关系注入到对象中,而不是由对象自己创建或查找这些依赖。

注入方式
构造函数注入(Constructor Injection)

通过构造函数传递依赖。
适用于必须的依赖,保证对象在被创建时就已经具备了必要的依赖。
示例:
public class MyService {
private final MyRepository repository;

public MyService(MyRepository repository) {
    this.repository = repository;
}

}
Setter 方法注入(Setter Injection)

通过 setter 方法传递依赖。
适用于可选的依赖,允许在对象创建后动态修改依赖。
示例:
public class MyService {
private MyRepository repository;

public void setRepository(MyRepository repository) {
    this.repository = repository;
}

}

IoC 和 DI 的关系
IoC 是一个原则,指的是将控制权交给外部容器。
DI 是一种实现方式,通过注入依赖来实现 IoC。

标签:容器,依赖,repository,DI,对象,Ioc,IoC
From: https://www.cnblogs.com/wjhfree/p/18675621

相关文章

  • ViewDataDictionary(this.ViewData)
    在ASP.NETMVC中,ViewDataDictionary是一个用于在控制器和视图之间传递数据的字典类。它继承自ViewDataContainer,并提供了键值对的存储和检索功能。ViewDataDictionary可以存储任何类型的数据,并且在视图中可以通过键名来访问这些数据。构造函数 ViewDataDictionary(this.ViewD......
  • (14-3-02)基于Latent Diffusion Transformer的文生视频系统:数据集处理(2)加载并处理Taic
    6.4.3 加载并处理Taichi数据集文件taichi_datasets.py实现了一个Taichi数据集类,用于加载和处理分帧存储的视频数据,特别是太极表演相关的帧序列。它包括从数据目录中读取视频帧、按时间进行帧采样、将帧数据转换为张量并应用数据增强等功能。代码通过torch.utils.data.Da......
  • Redis动态热点数据缓存策略设计
    Redis动态热点数据缓存策略设计1.热点数据识别机制1.1计数器方式@ServicepublicclassHotDataCounter{@AutowiredprivateRedisTemplate<String,Object>redisTemplate;//访问计数publicvoidincrementCounter(Stringkey){Strin......
  • dicom影像坐标转换
    有个需求要把病人坐标转换到图像像素坐标上,然后描点、填充生成mask。搞了两天头都快秃了,试了网上的好多方法都对不上,还是要结合实际情况多试试。1、roi提取关键信息为csvimportosimportcsvimportredefextract_points_with_name_from_roi(roi_file_path,csv_file_pa......
  • 从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
    点击链接,回顾发布会:https://www.bilibili.com/video/BV1v6c9euESz/根据StackOverflow的一个开发者调查报告:2024年有62% 的开发者正在使用AI编码工具;根据IDC的一个调查报告,对于已经探索生成式AI的中国企业,有31% 的研发人员已经在使用代码生成产品。AI编码工具的使用人......
  • 从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
    点击链接,回顾发布会:https://www.bilibili.com/video/BV1v6c9euESz/根据StackOverflow的一个开发者调查报告:2024年有62% 的开发者正在使用AI编码工具;根据IDC的一个调查报告,对于已经探索生成式AI的中国企业,有31% 的研发人员已经在使用代码生成产品。AI编码工具的使用人......
  • VP Codeforces Round 911 (Div. 2)
    A.CoverinWater题意:有n个格子,有些格子是好的,有些是坏的,你要给好格子都装上水,你可以花费一点价值让一个格子有水,也可以把一个格子的水移到另一个格子,没有花费。如果一个格子是好格子并且两边的格子都有水,这个格子就会自己填满水。问最少花费让所有好格子有水。容易想到,如果......
  • SpringBoot+Redis+消息队列 技术的抢购方案【附有图文+示例代码】
    文章目录SpringBoot+Redis+消息队列技术的抢购方案13.1简单抢购13.2模拟高并下发抢购jmeter工具使用实现13.3数据安全问题加锁synchronized分布式锁13.4消息队列完成抢购【yml配置文件】【实体类】【redis工具类】【队列配置类】【controller】【队列监听器RabbitQM......
  • C# NAudio 获取控制系统音量
    https://github.com/naudio/NAudioNAudio是一个开源的.NET音频库,由MarkHeath开发,开源地址:https://github.com/naudio/NAudio支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等。NA......
  • 如何开启主机上的MongoDB和Redis服务?
    关于您提到的如何开启主机上的MongoDB和Redis服务的问题,我们将为您提供详细的解决方案。MongoDB和Redis是两种广泛使用的NoSQL数据库,分别用于存储结构化数据和缓存数据。确保这些服务正常运行对于提升网站性能至关重要。以下是针对这两种服务的具体操作步骤。开启MongoDB服务......