File tree Expand file tree Collapse file tree 1 file changed +12
-3
lines changed
docs/system-design/framework/spring Expand file tree Collapse file tree 1 file changed +12
-3
lines changed Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments