我试图围绕这个概念。我的问题是:
答案 0 :(得分:9)
您可以使用Java代理实现字节码注入。
java Agent是一个库,它拦截类加载器上的字节码加载,并在它加载到JVM之前对其进行增强。当然,这样的库通常依赖于字节码操作库,例如Javassist,ASM或CGLib。 因此,当加载类时,字节码操作只进行一次。
见官方Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html
本文解释了如何做你想做的事情: http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html
另外,如果您真的对字节码基础知识感兴趣,那么来自JRebel开发人员的这篇文章应该让您满意: http://arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.html
最后,你可以看看Seren,我刚刚开始写的图书馆。它是一个增强可序列化类的Java代理。这只是一个开始,但它的工作原理。 https://github.com/oliviercroisier/seren