java SpringAOP代理方式,以及代理原理

动态代理适用场景


1,日志集中打印
2, 事物
3, 权限管理
4,Spring AOP


动态代理技术栈图


java SpringAOP代理方式,以及代理原理_第1张图片

SpingAOP可以哪些方式实现和区别

JDK Proxy(动态构建字节码)(生成一个全新的代理class)

cglib(动态构建字节码)(生成一个全新的代理class)

Aspectj (修改目标类的字节码,植入代理的字节,在程序中编译)(直接修改目标class)

instrumentation (修改目标类的字节码,类装载的时候动态拦截去修改,基于javaagent)
(直接修改目标class)

区别:

    JDK Proxy 和 cglib 易于实现

    Aspectj 和 instrumentation 实现性能高,但是代价大

多种实现方式的区别在于对字节码的切入方式不同,可选方式有:

    JDK Proxy ,cglib 是基于动态构建字节码

    Aspectj 是借助idea,eclipse编译工具在编译时候植入代理的字节码

    instrumentation 是基于javaagent在类装载的时候修改Class 植入代理字节码

    使用自定义ClassLoader在装载的时候植入字节码

动态代理的本质过程均是Class字节码的构建和修改 :

    修改的工具有ASM,javassist
    idea,eclipse

你可能感兴趣的:(Spring)