| AspectJ | Spring AOP |
| AspectJ是静态代理的增强; 静态代理,是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象; | Spring AOP使用的动态代理(运行时增强); 动态代理就是AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法; |
| AspectJ提供了完全的AOP 支持,它还支持属性级别的PointCut。 | SpringAOP 仅支持方法级别的PointCut; |
| AspectJ基于字节码操作(Bytecode Manipulation) | Spring AOP基于代理(Proxying) |
| Spring AOP已经集成了AspectJ | |
| AspectJ比Spring AOP功能更强大 | Spring AOP 相对来说更简单 |
切面比较少,那么两者性能差异不大。
切面多时,最好选择AspectJ ,它比Spring AOP快很多。



