美文网首页
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