美文网首页
SPRING AOP整理

SPRING AOP整理

作者: 秦道丶 | 来源:发表于2019-01-15 10:47 被阅读0次

    AspectJ

    一套独立的面向切面编程解决方案
    使用的是编译时增强,相比spring AOP使用的是运行时增强性能更优优势

    使用举例

    SayHelloService.java
    ---
    package com.ywsc.fenfenzhong.aspectj.learn;
    public class SayHelloService {
        public void say(){
            System.out.print("Hello  AspectJ");
        }
    }
    

    现在需要在say()方法后,通过AspectJ的后置增强来增加日志

    
    LogAspect.java
    ---
    package com.ywsc.fenfenzhong.aspectj.learn;
    public aspect LogAspect{
        pointcut logPointcut():execution(void SayHelloService.say());
        after():logPointcut(){
             System.out.println("记录日志 ..."); 
        }
    }
    

    使用AspectJ的bin命令编译(ajc.exe可以当作增强版本的javac.exe命令)

    > ajc -d . SayHelloService.java LogAspect.java
    生成 SayHelloService.class
    > java SayHelloService
    ---
    输出:  Hello AspectJ  记录日志
    

    Spring AOP

    AspectJ并不是spring的部分,spring仅仅使用了AspectJ的Annotation,虽然使用了Aspect的Annotation,但是并没有使用它的编译器和织入器。使用了Aspect来定义切面,使用Pointcut来定义切入点,使用Advice来定义增强处理

    spring用了2种代理技术

    • JDK动态代理 利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
    • CGLIB 利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

    相关文章

      网友评论

          本文标题:SPRING AOP整理

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