Java中常见到的aop就这三种了:SpringAOP、AspectJ、CGlib
- SpringAOP是纯基于Java的反射机制来实现的,速度较慢但是通用且强大,只能基于接口实现aop代理增强,运行时动态执行;
- AspectJ是基于AOP这一哲学设计理念的实践,是基于Java的扩展,在编译时对目标类(非接口实现类也可)进行aop代理增强,运行时直接调用字节码;
- CGlib全称Code Generation Library,即代码生成包,底层是ASM-一个短小精悍的字节码操作框架,运行时对无接口实现的非final类进行字节码aop代理增强;
相比较而言,反射效率是比较低的,而字节码更高效,执行速度比较:
AspectJ > CGlib > SpringAOP
AOP的切点、切面、通知等概念就不在此赘述了;
暂写这么多,后续有新的再补充...