mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
[docs update]完善 Spring AOP 和 AspectJ AOP 的区别
This commit is contained in:
parent
5533692b77
commit
c5be500745
@ -584,11 +584,20 @@ AOP 切面编程涉及到的一些专业术语:
|
||||
|
||||
### Spring AOP 和 AspectJ AOP 有什么区别?
|
||||
|
||||
**Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。** Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。
|
||||
| 特性 | Spring AOP | AspectJ |
|
||||
| -------------- | -------------------------------------------------------- | ------------------------------------------ |
|
||||
| **增强方式** | 运行时增强(基于动态代理) | 编译时增强、类加载时增强(直接操作字节码) |
|
||||
| **切入点支持** | 方法级(Spring Bean 范围内,不支持 final 和 staic 方法) | 方法级、字段、构造器、静态方法等 |
|
||||
| **性能** | 运行时依赖代理,有一定开销,切面多时性能较低 | 运行时无代理开销,性能更高 |
|
||||
| **复杂性** | 简单,易用,适合大多数场景 | 功能强大,但相对复杂 |
|
||||
| **使用场景** | Spring 应用下比较简单的 AOP 需求 | 高性能、高复杂度的 AOP 需求 |
|
||||
|
||||
Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,
|
||||
**如何选择?**
|
||||
|
||||
如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比 Spring AOP 快很多。
|
||||
- **功能考量**:AspectJ 支持更复杂的 AOP 场景,Spring AOP 更简单易用。如果你需要增强 `final` 方法、静态方法、字段访问、构造器调用等,或者需要在非 Spring 管理的对象上应用增强逻辑,AspectJ 是唯一的选择。
|
||||
- **性能考量**:切面数量较少时两者性能差异不大,但切面较多时 AspectJ 性能更优。
|
||||
|
||||
**一句话总结**:简单场景优先使用 Spring AOP;复杂场景或高性能需求时,选择 AspectJ。
|
||||
|
||||
### AOP 常见的通知类型有哪些?
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user