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 的基石。

相关推荐
驭渊的小故事3 小时前
SpringBoot 配置文件详解:properties 与 yml 从入门到实战
java·开发语言·笔记
Wx-bishekaifayuan3 小时前
Springcloud中学在线学习平台58883-计算机课程设计、毕业设计
java·vue.js·spring boot·学习·spring·spring cloud·课程设计
一嘴一个橘子3 小时前
java 中使用 lua 脚本
java
码智社3 小时前
Spring Framework 全方位技术解析
java
wangqiaowq3 小时前
AST 安全求值
java·开发语言
Java_2017_csdn4 小时前
OFC、ERP、OMS、WMS、TMS 对比-详解
java
EatFan12 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star12 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
现任明教教主~14 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
一条破秋裤15 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维