Spring 框架: IOC、DI、AOP 三大核心

Spring 框架凭借其轻量级、解耦、可扩展的特性,占据了 Java EE 开发的半壁江山。
但其实Spring 的核心逻辑并不复杂,抓住IOC 控制反转、DI 依赖注入、AOP 面向切面编程这三个关键点,就能轻松搞懂Spring架构

一、为什么需要 Spring 框架?

在没有 Spring 的年代,我们开发 Java Web 项目时,会面临一个致命问题:对象之间的依赖关系过于紧密,代码耦合度极高。

而 Spring 框架的出现,就是为了解决这些问题,它的核心价值就是解耦、复用、简化开发,而实现这些价值的核心,就是我们今天要讲的 IOC、DI、AOP。

二、IOC 控制反转:对象创建权的 “交权”

IOC(Inversion of Control,控制反转)是一种设计思想,而非具体实现。它的核心逻辑是:将对象的创建、管理、依赖关系的维护,从程序员手动控制 “反转” 给 Spring 容器来统一负责。
而Spring IOC 容器,是 IOC 设计思想的具体实现
2.1 如何将类纳入 IOC 容器?
Spring 提供了一系列注解,让我们可以轻松将类标记为 “需要被 IOC 容器管理的 Bean”,最核心的就是@Component 及其三个衍生注解:

@Component:通用注解,可标记任意类为 Spring Bean;
@Controller:衍生自@Component,专门标记控制层(Controller) 类(;
@Service:衍生自@Component,专门标记业务层(Service) 类;
@Repository:衍生自@Component,专门标记数据访问层(Mapper/DAO)。

Bean 的默认名称规则:
Spring IOC 容器底层用类似 “键值对” 的结构存储 Bean,默认的 Bean 名称(即键)是类名首字母小写(如UserServiceImpl → userServiceImpl)。

MyBatis 的 @Mapper 注解:
我们在实际开发中,数据访问层通常使用 MyBatis,此时会用@Mapper注解标记 Mapper 接口,而非@Repository。

注意:@Mapper是 MyBatis 提供的注解,并非 Spring 原生注解,仅加@Mapper无法让 Spring 扫描到该接口,还需要在 Spring 启动类上添加
@MapperScan("com.xxx.mapper"),指定 Mapper 接口所在包路径,Spring 才能通过 MyBatis 的动态代理生成接口实现类,并将其注册到 IOC 容器中。

2.2 IOC 的核心价值
通过 IOC 容器,我们无需再手动new对象,彻底摆脱了对象之间的紧密耦合,实现了
“松耦合、可维护、可扩展” 的开发模式。

三、DI 依赖注入:从 IOC 容器中 “拿对象”

3.1 什么是 DI?
DI(Dependency Injection,依赖注入) 是IOC 设计思想的另一种体现形式,它和 IOC 是 “一体两面” 的关系:
IOC 是 “存对象”:Spring 容器负责创建、存储 Bean;
DI 是 “取对象”:当一个 Bean 需要依赖另一个 Bean 时,Spring 容器自动将被依赖的 Bean 注入到当前 Bean 中,无需程序员手动获取。
3.2 如何实现 DI 依赖注入?
Spring 提供了多种依赖注入的方式,其中最常用的是注解注入,核心注解是@Autowired。
3.3 DI 的核心价值
DI 让 Bean 之间的依赖关系由 Spring 容器统一维护,程序员无需关心对象的获取过程,进一步降低了代码耦合度,提高了开发效率和代码的可维护性

四、AOP 面向切面编程

4.1 什么是 AOP?
AOP(Aspect Oriented Programming,面向切面编程)是一种面向对象编程(OOP)的补充和扩展,。
通俗点说:核心业务方法(如 “用户注册”“订单创建”)是 “主角”,公共横切逻辑(如 “日志记录”“事务管理”“权限校验”)是 “配角”,AOP 就是让 “配角” 独立于 “主角” 存在,且能重复参与多个 “演出”,而无需在每个 “主角” 的剧本中重复编写 “配角” 的台词。相当于三明治中间的馅料,可以更换。
4.2 AOP 的核心价值
AOP 将公共横切逻辑与核心业务逻辑分离,实现了公共逻辑的复用,减少了代码冗余,提高了代码的可维护性和可扩展性,同时也让开发人员可以更专注于核心业务逻辑的实现。

五、总结:Spring 三大核心的关系与价值

Spring 框架的IOC、DI、AOP 三大核心,并非孤立存在,而是相互配合、相辅相成的:
IOC 是基础:负责创建、管理 Bean,为 DI 和 AOP 提供支撑;
DI 是 IOC 的补充:负责将 Bean 注入到需要依赖它的 Bean 中,实现 Bean 之间的解耦;
AOP 是对 IOC/DI 的扩展:基于 IOC 容器中的 Bean,实现公共横切逻辑的复用,进一步降低代码耦合度。
三者共同实现了 Spring 框架的轻量级、解耦、可复用、可扩展的核心价值,让 Java 后端开发变得更高效、更规范、更易于维护。

posted @ 2026-01-28 19:31  Jennifer_F  阅读(0)  评论(0)    收藏  举报