Java 에이전트를 구현하는 방법은 무엇입니까? 1. Java Agent를 구현하려면 premain 메소드를 구현해야 합니다. 2. MANIFEST.MF 파일에 Premain-Class가 있어야 합니다.
바이트코드 수준에서 클래스와 메소드를 수정하는 기술은 컴파일에 영향을 주지 않고 바이트코드를 수정할 수 있습니다. Spring의 AOP 기술
의 역할을 이해할 수 있다. 바이트코드 수준에서 클래스와 메소드를 수정하는 기술로, 컴파일에 영향을 주지 않고 바이트코드를 수정할 수 있다. Spring의 AOP 기술을 이해할 수 있다
javaagent를 구현하려면 premain 메소드를 구현해야 한다
MANIFEST.MF 파일에 Premain-Class가 있어야 한다
package com.xueyou.demo.agent; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.CtNewMethod; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain; public class FirstAgent implements ClassFileTransformer { public final String injectedClassName = "com.xueyou.agentdemo.App"; public final String methodName = "hello"; public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { className = className.replace("/", "."); // System.out.println(className); if (className.equals(injectedClassName)) { CtClass ctclass = null; try { ctclass = ClassPool.getDefault().get(className);// 使用全称,用于取得字节码类<使用javassist> CtMethod ctmethod = ctclass.getDeclaredMethod(methodName);// 得到这方法实例 ctmethod.insertBefore("System.out.println(11111111);"); return ctclass.toBytecode(); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } return null; } }
package com.xueyou.demo; import com.xueyou.demo.agent.FirstAgent; import java.lang.instrument.Instrumentation; /** * Hello world! */ public class App { public static void premain(String agentOps, Instrumentation inst) { System.out.println("=========premain方法执行========"); System.out.println(agentOps); // 添加Transformer inst.addTransformer(new FirstAgent()); } }
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <PremainClass>com.xueyou.demo.App</Premain-Class> </manifestEntries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
javaagent를 지정하는 방법에는 두 가지가 있습니다.
1) 명령줄 사용: java -javaagent:XXX.jar ddd.jar
2) 사용 아이디어의 VM 옵션.
관련 기사:
Java가 에이전트를 사용하여 기본 메서드를 구현하기 전의 코드 예
SQL Server SQL 에이전트 서비스 사용 튜토리얼 요약
관련 동영상:
위 내용은 Java 에이전트를 구현하는 방법은 무엇입니까? Java 에이전트 사용 사례 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!