这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

Javaassist技术

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

这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

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

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

这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

Javaassist核心模块

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

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

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

● CtMethods:表示类中的方法。

● CtFields:表示类中的字段。

Javaassist修改EurekaClient

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

这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

Javaassist改写Class示例

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

这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

这年头能真正掌握Javaassist技术的程序员真不多,你懂吗?

本文给大家讲解的内容是服务监控治理,Javaassist技术

  1. 下篇文章给大家讲解的内容是服务监控治理,SpringBootAdmin监控详解
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章