Skip to content

Commit c5be500

Browse files
committed
[docs update]完善 Spring AOP 和 AspectJ AOP 的区别
1 parent 5533692 commit c5be500

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -584,11 +584,20 @@ AOP 切面编程涉及到的一些专业术语:
584584

585585
### Spring AOP 和 AspectJ AOP 有什么区别?
586586

587-
**Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。** Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。
587+
| 特性 | Spring AOP | AspectJ |
588+
| -------------- | -------------------------------------------------------- | ------------------------------------------ |
589+
| **增强方式** | 运行时增强(基于动态代理) | 编译时增强、类加载时增强(直接操作字节码) |
590+
| **切入点支持** | 方法级(Spring Bean 范围内,不支持 final 和 staic 方法) | 方法级、字段、构造器、静态方法等 |
591+
| **性能** | 运行时依赖代理,有一定开销,切面多时性能较低 | 运行时无代理开销,性能更高 |
592+
| **复杂性** | 简单,易用,适合大多数场景 | 功能强大,但相对复杂 |
593+
| **使用场景** | Spring 应用下比较简单的 AOP 需求 | 高性能、高复杂度的 AOP 需求 |
588594

589-
Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,
595+
**如何选择?**
590596

591-
如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比 Spring AOP 快很多。
597+
- **功能考量**:AspectJ 支持更复杂的 AOP 场景,Spring AOP 更简单易用。如果你需要增强 `final` 方法、静态方法、字段访问、构造器调用等,或者需要在非 Spring 管理的对象上应用增强逻辑,AspectJ 是唯一的选择。
598+
- **性能考量**:切面数量较少时两者性能差异不大,但切面较多时 AspectJ 性能更优。
599+
600+
**一句话总结**:简单场景优先使用 Spring AOP;复杂场景或高性能需求时,选择 AspectJ。
592601

593602
### AOP 常见的通知类型有哪些?
594603

0 commit comments

Comments
 (0)