欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-14 22:55:10
...

动态代理适用场景


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


动态代理技术栈图


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

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