佛山企业网站建设渠道,学校宣传栏版面设计,做淘宝还有必要做网站吗,淘金网站建设推广概述
javaagent 技术广泛应用于对代码的增强#xff0c;比如统计方法执行时间、GC 信息打印、分布式链路跟踪等#xff1b;实现方式包括 javassist 和 bytebuddy#xff0c;bytebuddy 是对 javassist 的改进#xff1b;类似于 spring 中的 AOP#xff1b;
Instrumentati…概述
javaagent 技术广泛应用于对代码的增强比如统计方法执行时间、GC 信息打印、分布式链路跟踪等实现方式包括 javassist 和 bytebuddybytebuddy 是对 javassist 的改进类似于 spring 中的 AOP
Instrumentation 实现对 main 方法增强
说明
新建两个项目一个打包成增强 jar 包一个写待增强业务代码可通过定义注解进行优化注意 maven 打包插件
1新建一个 maven 项目引入 pom 依赖并指定增强类
dependencies!-- javaagent --dependencygroupIdjavassist/groupIdartifactIdjavassist/artifactIdversion3.12.1.GA/versiontypejar/type/dependency
/dependenciesbuildplugins!-- 测试javaagent相关 --plugin!-- 打普通的jar包 --groupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion2.2/versionconfiguration!-- 打包配置 --archivemanifestEntriesProject-name${project.name}/Project-nameProject-version${project.version}/Project-version!-- main方法之前需要处理的类 --Premain-Classcom.firechou.test.javaagent.FireAgent/Premain-Class/manifestEntries/archiveskiptrue/skip/configuration/plugin/plugins
/build注意插件中 Premain-Class 指定的是增强类。
2新建代理类编写增强逻辑
public class FireAgent {/*** 在Instrumentation中有对应的说明当jvm以代理类的方式启动时Instrumentation的实例将传递给premain方法* param args* param instrumentation*/public static void premain(String args, Instrumentation instrumentation){System.out.println(agent premain(), args: args);}}3 打包成 jar执行打包命令注意不要执行 Plugins》jar》jar:jar 命令会提示找不到目标类。生成增强 jar 包如下
4在另一个项目中新建业务代码类即被增强的逻辑
public class FireAgentMainTest {public static void main(String[] args) {System.out.println(hello world);}
}添加 JVM 运行参数
-javaagent:test-javaagent/target/test-javaagent-1.0-SNAPSHOT.jarnamejarage33运行结果
agent premain(), args: namejarage33
hello world