javaAgent
2020-02-29 23:58
302 查看
1、一个主入口
public static void premain(String ages, Instrumentation instrumentation){ System.out.println("启动加载..."); instrumentation.addTransformer(new ClassFileTransformer() { @Override public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if(className == null || (!className.contains("Controller") && !className.contains("ServiceImpl"))){ return null; } System.out.println("className:"+className); try { CtClass newClass = ClassPool.getDefault().get(className.replaceAll("/",".")); CtMethod[] methods = newClass.getDeclaredMethods(); for (CtMethod method : methods) { if(isNative(method)){ continue; } method.insertBefore("\nSystem.out.println(\"这是新增加的输入\");"); } return newClass.toBytecode(); } catch (NotFoundException e) { e.printStackTrace(); } catch (CannotCompileException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return new byte[0]; } }); } /** * 判断方法是否本地方法 * @param method * @return */ public static boolean isNative(CtMethod method) { return Modifier.isNative(method.getModifiers()) || Modifier.isAbstract(method.getModifiers()); }
2、配置pom.xml
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Premain-Class>com.agent.JxwAgnet</Premain-Class> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
3、配置assembly.xml
<id>bin</id> <formats> <format>zip</format> </formats> <dependencySets> <dependencySet> <!-- 是否把本项目添加到依赖lib中 --> <useProjectArtifact>false</useProjectArtifact> <outputDirectory>/lib</outputDirectory> <scope>runtime</scope> </dependencySet> </dependencySets> <fileSets> <fileSet> <directory>target</directory> <outputDirectory>/</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> </fileSets>
4、运行java -javaagent:XXX.jar
转载于:https://my.oschina.net/u/2504004/blog/2998405
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- javaAgent说明和例子
- Jenkins节点配置页面,启动方法没有"Launch agent via Java Web Start"解决方法?
- Java(android)通过请求头(User-Agent)获取浏览器类型,操作系统类型,手机机型
- Java通过浏览器请求头(User-Agent)获取 浏览器类型,操作系统类型,手机机型
- java.lang.NoClassDefFoundError: com.mobclick.android.MobclickAgent
- Location of javaagent jar in bootclasspath
- JVM源码分析之javaagent原理完全解读
- Java agent技术原理文档
- JVM源码分析之javaagent原理完全解读
- 深入 Java 调试体系,第 2 部分: JVMTI 和 Agent 实现
- java 通过request.getHeader("user-agent")解析浏览器
- ClassLoader, JavaAgent, Aspectj Weaving一站式扫盲帖
- Java Agent入门实战(二)-Instrumentation源码概述
- java.lang.Instrument 代理Agent使用
- 再回首,Java——Just a valid agent
- 错误解决 java.lang.NoClassDefFoundError: com.mobclick.android.MobclickAgent
- 听云SDK影响其他项目报Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/networkbench/agent
- java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent
- APM JAVA 探针(-javaagent)涉及问题和实现思路
- JavaSe:-javaagent,-agentlib,-agentpath