硬核 | 基于ASM实现Java类与接口的动态代理

网站建设2年前发布
54 00

asm是一款编写字节码的框架,熟练使用可以加深对字节码指令的掌握。,Java动态代理是基于接口代理的,所以首先我们得定义一个公共接口。,现在代理用户接口,实现登陆逻辑和来打印登录的花费时间,再来看看Proxy的使用方法,newProxyInstance方法需要传三个参数,第一个类加载器,第二个需要代理的接口数组,第三个参数是调用方法处理器,也是我们写代理逻辑的需要实现的接口。,硬核 | 基于ASM实现Java类与接口的动态代理,实现InvocationHandler,判断传入的username 和password是否等于admin,而且打印调用方法耗时。,生成代理类,调用main方法,打印结果,硬核 | 基于ASM实现Java类与接口的动态代理,首先我们先看一下生成的代理类最终的样子,三个要点:,具体看看实现步骤,ASMProxy的主要功能一个是作为代理类需要继承的父类,接着提供一个和Proxy同样的静态方法newProxyInstance。newProxyInstance里面调用ASMProxyFactory生成字节码二进制流,然后调用自定义的类加载器来生成Class。最后反射生成代理类的实例,返回对象。,ASMProxyFactory,接着看看最核心的部分,ASMProxyFactory是怎样生成字节码的,分几个步骤:,ASMClassLoader,自定义类加载器,提供add方法,添加<类名、字节码>映射关系。覆写findClass方法,当类名能找到对应字节码时,调用defineClass生成Class。,App,运行App:打印两种代理方式的结果,硬核 | 基于ASM实现Java类与接口的动态代理

© 版权声明

相关文章