public class TestClassAop {
public TestClassAop() {
System.out.println("i am a constructor");
}
public void main() {
System.out.println("this is TestClassAop main");
test();
}
public void test() {
System.out.println("this is TestClassAop test");
}
}
package com.aop;
public class TestClient {
public static void main(String[] args) {
TestClassAop t=new TestClassAop();
t.main();
}
}
②然后打包
jar cvfm aops.jar META-INF/MANIFEST.MF com/aop/*.class
③然后运行
java -javaagent:aops.jar com.aop.TestClient
以下为输出的结果
execute start
execute end
bytecode add......
bytecode add complete.
i am a constructor
this is TestClassAop main
this is TestClassAop test
Execution method: test(nano sec): 1000057
Execution method: main(nano sec): 3061073
package com.aop;
import java.lang.instrument.Instrumentation;
public class Agent { public static void premain(String agent, Instrumentation instrumentation) { System.out.println("execute start"); instrumentation.addTransformer(new AOPIml()); System.out.println("execute end"); } }
package com.aop;
import java.io.ByteArrayInputStream; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain;
import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod;
public class AOPIml implements ClassFileTransformer { public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { byte[] byteCodes = classfileBuffer;
}
package com.aop;
public class TestClassAop { public TestClassAop() { System.out.println("i am a constructor"); } public void main() { System.out.println("this is TestClassAop main"); test();
}
package com.aop;
public class TestClient { public static void main(String[] args) { TestClassAop t=new TestClassAop(); t.main(); } }
打包成jar ①用jar -xvf aop.jar解开 编辑META-INF/MANIFEST.MF文件 Manifest-Version: 1.0 premain-class: com.aop.Agent Class-Path: javassist-3.21.0-GA.jar 最后必须有一行空行
②然后打包 jar cvfm aops.jar META-INF/MANIFEST.MF com/aop/*.class
③然后运行 java -javaagent:aops.jar com.aop.TestClient 以下为输出的结果 execute start execute end bytecode add...... bytecode add complete. i am a constructor this is TestClassAop main this is TestClassAop test Execution method: test(nano sec): 1000057 Execution method: main(nano sec): 3061073