请解释 Spring 框架中的 IoC(控制反转)和 AOP(面向切面编程)是什么,并简要说明它们各自的核心思想与作用。
考察说明
考察对 Spring 两大核心特性的理解程度,能否清晰阐述其定义、原理和实际应用价值。
回答思路
- 【回答框架 1】IoC 即控制反转,是一种设计原则。传统对象由自己直接 new 依赖,控制反转后对象的创建和依赖注入交给容器管理。依赖注入是 IoC 的主要实现方式,容器在对象创建时自动注入所需依赖。
- 【回答框架 2】IoC 容器负责管理 Bean 的生命周期和依赖关系。常见注入方式包括构造器注入、Setter 注入和字段注入,推荐构造器注入以保证依赖完整性,使代码更易于测试和维护。
- 【回答框架 3】AOP 即面向切面编程,用于将横切关注点(如日志、事务、安全)从业务逻辑中解耦。核心概念包含切点、通知、切面和连接点,Spring AOP 基于动态代理实现,默认对接口使用 JDK 动态代理,对类使用 CGLIB。
- 【回答框架 4】AOP 的典型应用包括声明式事务管理和日志记录,通过声明切面可将通用逻辑集中管理,减少代码重复,提高模块化程度。
- 【关键点 1】IoC 核心是容器管理对象生命周期与依赖关系,反转了对象的创建权。
- 【关键点 2】依赖注入是 IoC 的主要实现方式,常用构造器注入。
- 【关键点 3】AOP 用于分离横切关注点,核心概念有切点、通知、切面。
- 【关键点 4】Spring AOP 基于动态代理,JDK 代理针对接口,CGLIB 针对类。
- 【关键点 5】AOP 的典型场景是事务管理和日志记录。
- 【易错点 1】将 IoC 直接等同于依赖注入,忽略 IoC 是更宽泛的设计思想。
- 【易错点 2】混淆 Spring AOP 与 AspectJ 语法,Spring AOP 是运行时增强,AspectJ 可在编译期或加载期织入。
- 【易错点 3】认为 AOP 可以处理所有横切逻辑,但性能敏感场景需考虑代理开销。