轉載自:https://segmentfault.com/a/1190000005812795
1、修改字節碼
第一步要用的工具有ASM、javassist、cglib(基於ASM),用來修改字節碼。
2、加載新的字節碼
第二步,自定義ClassLoader來加載修改后的字節碼
3、替換原來的字節碼
或者替換掉原來的字節碼,這里主要有兩種技術:
1、在JVM加載用戶的Class時,攔截,返回修改后的字節碼
2、在運行時,使用Instrumentation.redefineClasses方法來替換掉原來的字節碼,和這個類相關的實例立即生效。
都需要agent外掛在啟動時
java -javaagent:xxxtransformer.jar xxxclass
或者運行時通過VirtualMachine.attach和VirtualMachine.loadAgent把agent attach到pid上