IoC控制反转与DI依赖注入

#IoC #Spring

什么是 IoC (Inversion of Control) 和 DI (Dependency Injection)?

IoC 控制反转

IoC 控制反转,指的是创建和控制注入 Spring Bean 的操作权 反转 交给框架去自动完成。

DI 依赖注入

DI 依赖注入,是 IoC 思想在 Spring 的实现,框架自动地将程序所需的依赖注入到 Bean 中。

在 Spring Boot 中的关系

IoC 是设计思想,DI 是实现方式。Spring 容器通过 IoC 容器管理 Bean,并通过 DI 完成依赖注入。


Spring Boot 中如何实现依赖注入?

依赖注入方式有:

  1. 注解 @Autowired 直接字段进行注入
  2. Setter() 方法注入
  3. 构造函数注入

我们通常会使用 构造函数字段注入

字段注入 Setter()注入 构造函数注入
final 不可变对象 ❌ 不可注入 ❌ 不可注入 ✅ 可以
通用性 只适用于 IoC 容器 只适用于 IoC 容器 非 IoC 也适用

解释@Autowired 注解的作用,以及它在 Spring Boot 中的自动装配模式有哪些?

@Autowired 自动装配


什么是 Bean 的作用域 (Scope)?

Spring Boot 支持多种 Bean 作用域:

作用域 描述
singleton 单例模式(默认)
prototype 原型模式,每次请求创建新实例
request 每次 HTTP 请求创建一个实例(Web)
session 同一个 HTTP Session 共享实例
application ServletContext 生命周期

@Qualifier 和 @Primary 注解

  • @Qualifier:显式指定 Bean 名称,用于解决多个同类型 Bean 的冲突
  • @Primary:标记优先使用的 Bean

ApplicationContext 与 BeanFactory

特性 BeanFactory ApplicationContext
类型 基础接口 BeanFactory 的子接口,更高级
功能 基础的 IoC 容器功能 提供更多企业级特性(事件发布、国际化、资源加载等)
初始化时机 懒加载(getBean 时才初始化) 饿加载(容器启动时预加载所有单例 Bean)
适用场景 资源受限的环境或需要延迟加载 大多数企业应用(推荐使用)

配置文件依赖注入

可以在 application.propertiesapplication.yml 中配置属性,然后通过:


依赖反转原则 (DIP)

依赖反转原则(DIP)是 SOLID 原则之一,主张:

  • 高层模块不应依赖低层模块,两者都应依赖抽象
  • 抽象不应依赖细节,细节应依赖抽象

DI 是 DIP 在 Spring 中的具体实现。