2020-08-28:Spring AOP和AspectJ AOP有什么区别?

前言

每日一题专栏

Spring AOP和AspectJ AOP有什么区别?

AspectJ和Spring AOP都是对目标类增强,生成代理类。

AspectJ是在编译期间将切面代码编译到目标代码的,属于静态代理;Spring AOP是在运行期间通过代理生成目标类,属于动态代理。
AspectJ是静态代理,故而能够切入final修饰的类,abstract修饰的类;Spring AOP是动态代理,其实现原理是通过CGLIB生成一个继承了目标类(委托类)的代理类,因此,final修饰的类不能被代理,同样static和final修饰的方法也不会代理,因为static和final方法是不能被覆盖的。在CGLIB底层,其实是借助了ASM这个非常强大的Java字节码生成框架。关于CGLB和ASM的讨论将会新开一个篇幅探讨。
Spring AOP支持注解,在使用@Aspect注解创建和配置切面时将更加方便。而使用AspectJ,需要通过.aj文件来创建切面,并且需要使用ajc(Aspect编译器)来编译代码;

Spring AOP我们可以使用Aspectj提供的注解;换句话说就是使用Aspectj的语法风格,所以你在做springAop的时候@Aspect;@Before;@PonitCut等等这些注解其实都是Aspectj提供的,不是spring提供的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。