您的位置:首页 > 编程语言 > Java开发

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
chuhanlou7483 发布了0 篇原创文章 · 获赞 0 · 访问量 59 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: