IoC(控制反转)详解:Spring 的核心思想

目录

[1. 什么是 IoC?](#1. 什么是 IoC?)

[2. 传统方式 vs IoC 方式](#2. 传统方式 vs IoC 方式)

[2.1 传统方式(紧耦合)](#2.1 传统方式(紧耦合))

[2.2 IoC 方式(解耦)](#2.2 IoC 方式(解耦))

[3. IoC 的本质是什么?](#3. IoC 的本质是什么?)

[4. IoC 与 DI 的关系](#4. IoC 与 DI 的关系)

[5. Spring IoC 容器的核心职责](#5. Spring IoC 容器的核心职责)

[6. 常见注入方式](#6. 常见注入方式)

[7. IoC 的应用场景](#7. IoC 的应用场景)

[8. 一句话总结](#8. 一句话总结)


1. 什么是 IoC?

IoC(Inversion of Control,控制反转)是一种设计思想 ,它的核心是:将对象的创建和依赖关系的维护,从程序代码中交给容器来完成。

在传统开发中,对象的控制权掌握在程序员手中;

而在 IoC 模式下,这个控制权被"反转"给了容器。

2. 传统方式 vs IoC 方式

2.1 传统方式(紧耦合)

java 复制代码
public class UserService {
    private UserDao userDao = new UserDao();
}

问题:

  • 类之间强依赖

  • 难以替换实现

  • 不利于测试和扩展

2.2 IoC 方式(解耦)

java 复制代码
public class UserService {
    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }
}

对象的创建和注入交给 Spring:

java 复制代码
@Component
public class UserDao {}
java 复制代码
@Service
public class UserService {
    @Autowired
    private UserDao userDao;
}

3. IoC 的本质是什么?

本质只有一句话:对象不再自己创建依赖,而是被动接收依赖。

这带来了:

  • 低耦合

  • 高可维护性

  • 更易扩展

4. IoC 与 DI 的关系

名称 含义
IoC 一种设计思想
DI(Dependency Injection) IoC 的具体实现方式

DI 是手段,IoC 是目的

5. Spring IoC 容器的核心职责

Spring IoC 容器主要做三件事:

  1. 创建对象(Bean)

  2. 管理对象生命周期

  3. 维护对象之间的依赖关系


6. 常见注入方式

  • 构造器注入(推荐)

  • Setter 注入

  • 字段注入(@Autowired


7. IoC 的应用场景

  • Service / Dao 解耦

  • 配置驱动开发

  • 单元测试(Mock)

  • 大型项目模块化设计


8. 一句话总结

IoC 是一种"把对象控制权交给容器"的设计思想,是 Spring 的基石。

相关推荐
懒鸟一枚2 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我123454 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑4 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ6 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案6 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅7 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp7 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG4777 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
程序员天天困8 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY8 小时前
Integer类型超限,导致数据异常
java·算法