前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring学习笔记 | 控制反转IoC与依赖注入DI

Spring学习笔记 | 控制反转IoC与依赖注入DI

作者头像
windealli
发布2024-04-30 15:57:05
3180
发布2024-04-30 15:57:05
举报
文章被收录于专栏:windealli

什么是控制反转:IoC ?

IoC 全称 Inversion Of Control, 即控制反转。

IoC 是Spring框架最核心的特性之一。在IoC模式下,对象(组件)的创建和管理不再由对象自己负责,而是交给了IoC容器。对象只需要声明自己的依赖,IoC容器会在运行时自动将依赖注入到对象中。

什么是依赖注入:DI ?

依赖注入是控制反转的实现方式。DI允许对象通过构造函数、settler、字段等方式来接收依赖项。对象不需要自己创建、查找它们的依赖项;IoC容器在创建对象时会自动注入这些依赖项。

为什么需要 IoC/DI ?

Spring 引入IoC/DI 可以解决一下问题:

- 对象生命周期管理困难:

代码语言:javascript
复制
传统开发模式中,对象/组件的创建和生命周期管理都需要开发者的程序自己维护,增加了开发的难度。IoC将这部分工作交给了IoC容器,方便了对象/组件生命周期的管理。

- 代码耦合高:

代码语言:javascript
复制
传统开发模式中,对象/组件的创建和生命周期管理是硬编码在开发者的程序中,不同组件的代码耦合度高。不利于维护和扩展。

- 可测难度大:

代码语言:javascript
复制
传统开发模式中,对象/组件间依赖关系是硬编码,不易于将依赖项替换为模拟组件/对象,增加了测试难度。IoC模式则可以很容易将依赖项用模拟组件/对象替代。

- 代码可重用型低:

代码语言:javascript
复制
传统开发模式中,对象/组件的依赖关系是硬编码在组件内部,使得组件的可重用性较低。IoC则将一来关系抽象出来,增加了代码的可重用性。

如何使用 IoC/DI ?

Spring IoC 的实现包含以下步骤

  1. 配置元数据: 基于XML、基于注解、基于配置类
  2. 实例化IoC容器:通过ApplicationContext接口
  3. 获取Bean:context.getBean()

IoC/DI 的实现原理

IoC/DI 底层是通过反射机制来实现的。

  • 在创建Bean时,Spring IoC容器会调用Java的反射API来调用Bean的构造函数。
  • 在注入依赖时,Spring IoC容器会使用Java的反射API来访问Bean的字段和方法。

Spring IoC的涉及一下步骤:

  1. 配置文件解析(XML、注解、配置类),加载Bean的定义信息,包括Bean的名称、类路径、依赖关系等。
  2. 创建Bean(含以来注入):根据Bean的定义信息,利用反射机制创建Bean对象。
  3. 依赖注入:利用反射机制将Bean对象所依赖的其他对象注入到当前Bean中
  4. Bean的使用和销毁

Spring IoC 中的关键接口/对象

在Spring框架中,IoC主要通过以下几个关键的接口或对象来实现:

  1. BeanFactory:这是Spring IoC容器的基础接口,它提供了配置框架和基本功能,如获取bean,检查bean是否存在,获取bean的别名等。
  2. ApplicationContext:这是一个更高级的接口,它继承自BeanFactory接口。ApplicationContext添加了更多企业级特性,如事件发布,国际化处理,资源访问等。在大多数应用场景中,我们都会使用ApplicationContext而不是直接使用BeanFactory。
  3. BeanDefinition:这个接口定义了一个bean的配置信息,包括bean的类名,是否是单例,依赖的bean等。在Spring的配置文件中,每一个元素就对应一个BeanDefinition对象。
  4. BeanPostProcessor:这是一个重要的扩展点,它允许我们在bean初始化前后添加自定义的逻辑。例如,我们可以通过实现BeanPostProcessor接口,在bean初始化后进行一些额外的处理。
  5. FactoryBean:这是一个特殊的bean,它的主要作用是产生其他bean。当一个bean的创建过程比较复杂,或者需要编程逻辑来创建时,我们可以使用FactoryBean。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天二路搬砖工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是控制反转:IoC ?
  • 什么是依赖注入:DI ?
  • 为什么需要 IoC/DI ?
  • 如何使用 IoC/DI ?
  • IoC/DI 的实现原理
  • Spring IoC 中的关键接口/对象
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档