设为首页 加入收藏

TOP

Java虚拟机知识点-字节码
2019-08-04 00:13:04 】 浏览:49
Tags:Java 虚拟 知识点 字节

??可以利用开源库直接操作字节码,如CGLib、ASM、Javassist等,他们可以在程序运行时,动态地创建字节码类或者编辑存在的字节码类。其中,CGLib是基于ASM实现的,是一个高效高性能的生成库;而ASM是一个轻量级的类库,但需要涉及到JVM的操作和指令;相比而言,Javassist要简单的多,完全是基于Java的API,但其性能相比前二者要差一些。


??Java 编译完后不会立即生成代理类,而是在运行时动态生成代理类字节码,并加载到内存中。通过实现JDK的接口 InvocationHandler 就可以来实现动态代理。


??使用JDK实现动态代理的类必须要实现一个接口,在实际开发中有一定的局限性,反射的效率也并不是很高,因此可以利用操作字节码技术来实现动态代理。流行的开发框架 Spring 则同时实现了这两种方式,可以在实际开发中选择基于JDK的动态代理,或者基于CGLib的动态代理。


CGLib 的 github地址


通过CGLib来实现动态代理需要引入CGLib和asm的依赖包


需要被代理的类


实现CGLib的方法拦截器


测试类


运行结果


F 盘下生成的代理类


代理类


由于CGlib是通过对需要增强的类生成一个子类,并覆盖其中的方法来实现动态代理的,所以CGlib可以为无接口的类直接做代理,但是不能为final类做代理。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java虚拟机知识点-类加载 下一篇Java虚拟机知识点-方法调用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目