Agent和ClassLoader

本文介绍了JavaAgent的引入时间及其在main方法之前的执行顺序,讲解了如何运行JavaAgent,并列举了其应用场景,如字节码修改、类加载监控等。此外,还探讨了Agent打包的方法,包括MANIFEST.MF和Pom.xml配置。文章通过示例展示了代码增强的多种方式,同时指出在agent中调用业务代码可能导致ClassNotFoundException,原因是类加载器的差异。为解决这个问题,文章提出了自定义类加载器的解决方案,并对类加载器的双亲委派模型进行了反思。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaAgent是什么时候引入的

JavaAgent是JDK1.5之后引入,也可以叫做Java代理

JavaAgent和我们的业务代码执行的顺序是什么?

JavaAgent是运行在main方法之前的拦截器,它内定的方法叫premain,也就是说先执行premain方法,然后再执行main方法。

怎么运行JavaAgent呢?

在我们的启动参数中增加 -javaagent:agent-2.0.jar 就可以了。
agent通常应用在哪里呢,看下图:
在这里插入图片描述

agent开发用到的jar包有哪些

<dependency>    
  <groupId>org.javassist</groupId>    
  <artifactId>javassist</artifactId>    
  <version>3.18.2-GA</version>
</dependency>
<dependency>    
  <groupId>net.bytebuddy</groupId>    
  <artifactId>byte-buddy</artifactId>    
  <version>1.10.19</version>
</dependency>
<dependency>    
  <groupId>net.bytebuddy</groupId>    
  <artifactId>byte-buddy-agent</artifactId>    
  <version>1.10.19</version>
</dependency>

Agent能做什么?

1、可以在加载java文件之前做拦截把字节码做修改
2、可以在运行期将已经加载的类的字节码做变更
3、获取所有已经被加载过的类
4、获取所有已经被初始化过了的类
5、获取某个对象的大小
6、将某个jar加入到bootstrapclasspath里作为高优先级被bootstrapClassloader加载
7、将某个jar加入到classpath里供AppClassloard去加载

Agent打包

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值