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执行我们添加的自定义代码逻辑,代码如下:

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

  1. 雷军:人因梦想而伟大 金山骨子里重视技术尊重程序员

    金山软件董事长雷军日前在金山软件成立30周年时表示,当年因为自己的电脑被不小心给格式化了,连备份硬盘都格式化了,断了后路,从此走上了当CEO的"不归路". 金山30年来辉煌的成绩和 ...

  2. 年度Java技术盘点,懂这些技术的程序员2019年薪资翻倍!

    与一年前一样,Java仍然是最流行的编程语言.据TIOBE的数据显示,几十年来,Java比其他语言更常名列榜首,Java因为它拥有可移植性.可扩展性和庞大的用户社区,所以许多知名互联网公司使用Java ...

  3. 由浅入深区块链技术,程序员不得不看的十篇好文

    http://www.infoq.com/cn/news/2018/01/blockchain-ten-articles 区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念.从技术角度来看,这 ...

  4. java程序员面试技术_java程序员面试应该具备的一些基本技能

    这里列举一些Java程序员面试应该要具备的一些基本技能,仅当参考. 1.基本语法 包括static.final.transient等关键字的作用,foreach循环的原理等等.越简单的问题越能看出一个 ...

  5. 小米实现隔空充电技术;程序员离职小技巧;GitLab 涨价|开发者周刊

    整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) CSDN开发者周刊:只为传递"有趣/有用"的开发者内容! 本周热门项目 0.从 4 美元涨到 19 美元,GitLa ...

  6. CSDN技术分享——程序员如何快速上手区块链底层技术?

    区块链,应该是这两年来最火的话题.相比去年年末到今年年初,其火热程度虽有所降低,但依旧会有很多人想了解,想探寻其中的奥秘. 令人尴尬的是,真正火起来的不是区块链技术本身,而是数字资产和相关炒作.你跟  ...

  7. java程序员技术_JAVA程序员需要懂得哪些技术

    原标题:JAVA程序员需要懂得哪些技术 学习java,掌握java技术,成功找到一份满意的工作,这才是一个完美的学习过程和结果.那对于初学java的同学来说,想要成功找到一份工作需要掌握哪些java技 ...

  8. “湘见”技术沙龙 | 程序员CSDN的进阶之路

    5月25日,"湘见"技术沙龙在CSDN长沙总部成功举办.本次沙龙以 "湘见"为主题,CSDN高校俱乐部邀请来自各领域的技术大咖和技术爱好者汇聚一堂,围绕程序员进 ...

  9. 教你从技术上程序员不愁无线如何操作

    提前声明:本文内容只用于技术分享,如被用作其他用途,所产生的后果与本作者无关 网上对于程序员不缺无线这件事,其实作者作为一个程序猿,看法是说的有些不准确,并不是所有程序员都会干这个事,不同的程序员,分 ...

最新文章

  1. 检验入参合法性有哪些_验证用户输入的参数合法性的shell脚本
  2. M - Corporate Identity(多组字符串匹配问题)
  3. 2022五一数学建模有何思路模型?
  4. 从Kaminario谈谈“三大”存储热点技术
  5. Gh0st整理资料1
  6. 【FreeSwitch开发实践】使用SIP客户端Yate连接FreeSwitch进行VoIP通话
  7. 22、了解网卡和IP地址
  8. 网站备案常见词汇解释汇总
  9. Ceph Async RDMA网络通信性能优化
  10. 写好简历的16个关键点
  11. 社区发现算法——(Spectral Clustering)谱聚类算法
  12. 设计模式学习总结系列应用实例
  13. android 仿飞猪日历,vue 日期选择 类似飞猪
  14. 新颖的自我介绍_有关最新颖的自我介绍
  15. 写一段有趣的科普文来介绍鲫鱼
  16. 计算机高中期末总结作文,期末考试总结作文(精选5篇)
  17. [Asp.Net Core]NET5跨平台的本质
  18. LocalDB的使用详解
  19. Fragment重叠问题简单解决方案
  20. Java的socket简单语法实例以及多线程

热门文章

  1. 2020泰迪杯C题解题流程
  2. 3. 剪辑入门--电影混剪 (1)
  3. [转帖] 李竞恒:帝国的残阳
  4. Project2016创建复合视图
  5. java sql查询空内容,sql查询空指针异常
  6. java获取经纬度_java调用高德地图api获取某个位置的经纬度
  7. 手把手教程 | 实现Amazon CloudWatch持续报警
  8. 输入三角形三边长,求三角形面积
  9. 【stm32f103中断编程步骤】
  10. Dual Super-Resolution Learning for Semantic Segmentation解读