序
AOP和IOC是J2EE的两大基石,传统的AOP是在代码层面的,在bytecode层面也有aop技术,就是基于JVMTI(JVM TOOL INTERFACE)的instrument技术。这里主要记录下instrument入门使用。
agent实例
public class SimpleJavaAgent {
public static void premain(String args, Instrumentation instrumentation){
System.out.println("Premain");
System.out.println("Number of classes loaded: "+instrumentation.getAllLoadedClasses().length);
// instrumentation.addTransformer(new DemoTransformer());
}
}
maven打包
maven-assembly-plugin
${basedir}
true
true
com.geekyarticles.instrumentation.SimpleJavaAgent
jar-with-dependencies
执行mvn assembly:single
main实例
public class SimpleJavaAgentDemo {
public static void main(String[] args) {
System.out.println("Hello! its the main method");
}
}
exec的maven配置
org.codehaus.mojo
exec-maven-plugin
exec
java
-javaagent:"${project.parent.basedir}${file.separator}simple-agent${file.separator}simple-agent-1.0-SNAPSHOT-jar-with-dependencies.jar"
-classpath
com.geekyarticles.instrumentation.SimpleJavaAgentDemo
执行mvn compile,然后mvn exec:exec
参考