这年头能真正掌握Javaassist技术的程序员真不多

Javaassist技术

Javaassist是一个开源的分析、编辑和创建Java字节码的类库,在运行时能动态生成类、修改类,并且能直接使用Java编码。

在前面的JavaAgent一节中,我们知道通过Transformer方法可以取得类的字节码文件流,利用Javaassist技术可以解析字节码文件流为类对象,并对其进行修改,非常快速便捷。通过结合Javaassist与JavaAgent技术可以使字节码修改工作事半功倍。

Java字节码以二进制的形式存储在.class文件中,每一个.class文件都包含一个Java类或接口。Javaassist就是一个用来处理Java字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者修改已有的方法,并且不需要对字节码有深入的了解。下面是代码示例,首先需要引入jar包:

Javaassist核心模块

Javaassist中的核心模块是ClassPool、CtClass、CtMethod及CtField这几个类,下面简单介绍这些类的主要作用。

● ClassPool:一个基于HashMap实现的CtClass对象容器,其中键 是 类 名 称 , 值 是 表 示 该 类 的 CtClass 对 象 。 默 认 的ClassPool使用与底层JVM相同的类路径,因此在某些情况下,可能需要向ClassPool添加类路径或类字节。

● CtClass:表示一个类,这些CtClass对象可以从ClassPool中获得。

● CtMethods:表示类中的方法。

● CtFields:表示类中的字段。

Javaassist修改EurekaClient

下面代码的功能是改写Eureka的onCacheRefreshed()方法,通过下面字节码的改写可以触发父类的缓存刷新事件(这个功能是原onCacheRefreshed方法中不具备的逻辑),对于所有注册了该监听事件的方法都会执行“父类的缓存刷新”回调事件。

 

Javaassist改写Class示例

下面的方法是我们对Javaassist API的进一步封装,它可以在任意方法前后对任意Class执行我们添加的自定义代码逻辑,代码如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值