美文网首页
2020-08-28:Spring AOP和AspectJ AO

2020-08-28:Spring AOP和AspectJ AO

作者: 残冬十九 | 来源:发表于2020-08-28 23:24 被阅读0次

    前言

    每日一题专栏

    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提供的

    相关文章

      网友评论

          本文标题:2020-08-28:Spring AOP和AspectJ AO

          本文链接:https://www.haomeiwen.com/subject/fxtdsktx.html