这年头能真正掌握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执行我们添加的自定义代码逻辑,代码如下:
这年头能真正掌握Javaassist技术的程序员真不多相关推荐
- 雷军:人因梦想而伟大 金山骨子里重视技术尊重程序员
金山软件董事长雷军日前在金山软件成立30周年时表示,当年因为自己的电脑被不小心给格式化了,连备份硬盘都格式化了,断了后路,从此走上了当CEO的"不归路". 金山30年来辉煌的成绩和 ...
- 年度Java技术盘点,懂这些技术的程序员2019年薪资翻倍!
与一年前一样,Java仍然是最流行的编程语言.据TIOBE的数据显示,几十年来,Java比其他语言更常名列榜首,Java因为它拥有可移植性.可扩展性和庞大的用户社区,所以许多知名互联网公司使用Java ...
- 由浅入深区块链技术,程序员不得不看的十篇好文
http://www.infoq.com/cn/news/2018/01/blockchain-ten-articles 区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念.从技术角度来看,这 ...
- java程序员面试技术_java程序员面试应该具备的一些基本技能
这里列举一些Java程序员面试应该要具备的一些基本技能,仅当参考. 1.基本语法 包括static.final.transient等关键字的作用,foreach循环的原理等等.越简单的问题越能看出一个 ...
- 小米实现隔空充电技术;程序员离职小技巧;GitLab 涨价|开发者周刊
整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) CSDN开发者周刊:只为传递"有趣/有用"的开发者内容! 本周热门项目 0.从 4 美元涨到 19 美元,GitLa ...
- CSDN技术分享——程序员如何快速上手区块链底层技术?
区块链,应该是这两年来最火的话题.相比去年年末到今年年初,其火热程度虽有所降低,但依旧会有很多人想了解,想探寻其中的奥秘. 令人尴尬的是,真正火起来的不是区块链技术本身,而是数字资产和相关炒作.你跟 ...
- java程序员技术_JAVA程序员需要懂得哪些技术
原标题:JAVA程序员需要懂得哪些技术 学习java,掌握java技术,成功找到一份满意的工作,这才是一个完美的学习过程和结果.那对于初学java的同学来说,想要成功找到一份工作需要掌握哪些java技 ...
- “湘见”技术沙龙 | 程序员CSDN的进阶之路
5月25日,"湘见"技术沙龙在CSDN长沙总部成功举办.本次沙龙以 "湘见"为主题,CSDN高校俱乐部邀请来自各领域的技术大咖和技术爱好者汇聚一堂,围绕程序员进 ...
- 教你从技术上程序员不愁无线如何操作
提前声明:本文内容只用于技术分享,如被用作其他用途,所产生的后果与本作者无关 网上对于程序员不缺无线这件事,其实作者作为一个程序猿,看法是说的有些不准确,并不是所有程序员都会干这个事,不同的程序员,分 ...
最新文章
- 检验入参合法性有哪些_验证用户输入的参数合法性的shell脚本
- M - Corporate Identity(多组字符串匹配问题)
- 2022五一数学建模有何思路模型?
- 从Kaminario谈谈“三大”存储热点技术
- Gh0st整理资料1
- 【FreeSwitch开发实践】使用SIP客户端Yate连接FreeSwitch进行VoIP通话
- 22、了解网卡和IP地址
- 网站备案常见词汇解释汇总
- Ceph Async RDMA网络通信性能优化
- 写好简历的16个关键点
- 社区发现算法——(Spectral Clustering)谱聚类算法
- 设计模式学习总结系列应用实例
- android 仿飞猪日历,vue 日期选择 类似飞猪
- 新颖的自我介绍_有关最新颖的自我介绍
- 写一段有趣的科普文来介绍鲫鱼
- 计算机高中期末总结作文,期末考试总结作文(精选5篇)
- [Asp.Net Core]NET5跨平台的本质
- LocalDB的使用详解
- Fragment重叠问题简单解决方案
- Java的socket简单语法实例以及多线程