Java实现AOP有几种方式?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java实现AOP有几种方式?

2019-04-28 17:36:05 7801 15

本问题来自云栖社区【阿里Java技术进阶2群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。

取消 提交回答
全部回答(15)
  • shawn2046
    2020-03-31 19:16:51

    aop有静态和动态之分 静态实际开发中很少用到 动态又分jdk动态代理和cglib动态代理,两者各有优缺点

    0 0
  • 1156606323420497
    2020-03-26 23:36:39

    字节码:重新编译Java字节码,将切面插入字节码的某些点面上,如cglib 类加载器:定制类加载器,在类加载时对字节码进行补充,在字节码中插入切面,如Java Agent 动态代理组件:Java提供的动态代理

    0 0
  • __梦
    2020-03-21 14:27:10

    jdk的动态代理和cglib

    0 0
  • galaxystar
    2020-03-18 17:00:48

    静态和动态

    0 0
  • Hugoby
    2020-03-12 17:39:24
    1. 静态AOP:在编译期,切面以字节码的形式编译到目标字节码文件中,属于编译时字节码增强,通过@AspectJ注解实现。
    2. JDK动态代理:利用反射机制,在运行期,目标类加载后,为接口动态生成代理类。通过实现InvocationHandler接口实现。
    0 0
  • huc_逆天
    2019-11-12 17:16:50

    基于JDK的动态代理,和基于CGLIB的动态代理

    0 0
  • jianxia801
    2019-10-30 17:26:52

    1、静态AOP:在编译期,切面直接以字节 码的形式编译到目标字节 码文件中。 AspectJ属于静态AOP,是在编译时进行增强,会在编译的时候将AOP逻辑织入到代码中,需要专有的编译器和织入器。

    优点:被织入的类性能不受影响。 缺点:不够灵活 2、动态AOP(JDK动态代理):在运行期,目标类加载后,为接口动态生成代理类,将切面植入到代理类中。 Java从1.3引入动态代理。实现原理是为被代理的业务接口生成代理类,将AOP逻辑写入到代理类中,在运行时动态织入AOP,使用反射执行织入的逻辑。 主要实现方式依赖java.lang.reflect包下的InvocationHandler和Proxy类。

    优点:Java标准库原生支持,使用简单,无需引用额外的包。相对于静态AOP更灵活。 缺点:带代理的类必须是接口,灵活性受到一些限制;使用反射会影响一些性能。 3、动态代码字节生成:在运行期,目标类加载后,动态构建字节码文件生成目标类的子类,将切面逻辑加入到子类中。 CGLib是动态代码字节生成的实现,它封装字节码生成工具Asm,原理是在运行期间目标字节码加载后,生成目标类的子类,将切面逻辑加入到子类中,所以使用Cglib实现AOP不需要基于接口。

    优点:没有接口也可以织入,灵活性高。 缺点:扩展类的实例方法为final时,则无法进行织入 4、自定义类加载器:在运行前,目标加载前,将切面逻辑加到目标字节码中。 可以考虑javassist来实现。Javassist 是一个编辑字节码的框架,可以让你很简单地操作字节码。它可以在运行期定义或修改Class。使用Javassist实现AOP的原理是在字节码加载前直接修改需要切入的方法。

    优点:可以对绝大部分类织入。 缺点:如果用到了其他类加载器,则这些类将不被织入

    0 0
  • 有头发的程序猿
    2019-10-30 16:14:51

    spring中有两种方式实现AOP。 在实现接口的情况下,利用的是jdk的动态代理方式实现aop ,没有实现接口时,使用cglib方式实现,cglib实现原理是通过字节码技术生成了一个继承于被代理类的代理类来实现代理的

    0 0
  • 1668252494295472
    2019-10-30 15:47:00

    xml配置和注解。其原理就是动态代理,包括jdk的动态代理和cglib

    0 0
  • 力幸
    2019-10-16 14:51:56

    jdk和cglib,jdk需要实现接口,cglib则是通过继承的方式

    0 0
  • 魔法王者安琪拉
    2019-09-11 15:22:11

    jdk和cglib

    0 0
  • catcatchmouse
    2019-07-17 23:34:31

    在springboot中,如果实现了接口的话是jdk的动态代理,没有实现接口的话是cglib的动态代理

    2 0
  • han1396735592
    2019-07-17 23:34:30

    jdk和cglib

    0 0
  • 阿靖哦
    2019-07-17 23:34:30

    我只知道 动态AOP, 静态AOP,操作字节码这三种

    0 0
  • Mr.龙猫先生
    2019-07-17 23:34:30

    面向切面编程,我只是简单的使用过。

    0 0
滑动查看更多
相关问答

0

回答

请问在java中int转String的性能最优的方法是什么?

2021-11-07 00:18:07 115浏览量 回答数 0

1

回答

在java中int转String的性能最优的方法是什么?

2021-11-06 20:32:59 171浏览量 回答数 1

1

回答

java 应用程序执行右连接关联表right join查询时性能非常慢,该如何优化呢?

2021-11-06 10:03:08 139浏览量 回答数 1

1

回答

在java应用程序中查询计算数据库表平均值avg时性能非常低,该如何优化呢?

2021-11-06 10:02:55 169浏览量 回答数 1

1

回答

系统磁盘I/O的性能指标是否会影响到java应用系统的性能?

2021-11-06 10:01:55 113浏览量 回答数 1

1

回答

java 应用程序执行内连接关联表inner join查询时性能非常慢,该如何优化呢?

2021-11-06 10:01:45 221浏览量 回答数 1

1

回答

系统CPU的性能指标是否会影响到java应用系统的性能?

2021-11-06 10:01:35 150浏览量 回答数 1

1

回答

在java应用程序中查询计算数据库表最大值max时性能非常慢,该如何优化呢?

2021-11-06 10:00:26 166浏览量 回答数 1

1

回答

java循环时使用String连接符与重用StringBuilder在性能上有什么不同,该如何优化?

2021-11-06 10:00:15 143浏览量 回答数 1

1

回答

在java条件判断中switch/case 语句与while()语句哪个性能更好,依据是什么?

2021-11-06 10:00:05 101浏览量 回答数 1
+关注
李博 bluemind
云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147
2107
文章
1103
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载