直接上代碼:java
pom增長依賴:spa
<dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.18.2-GA</version> </dependency>
寫個Hello類:code
package JavassistTest.JavassistTest; public class Hello { public void sayHello(){ System.out.println("Hello world"); } }
主類:blog
package JavassistTest.JavassistTest; import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.CtNewMethod; import javassist.NotFoundException; /** * Hello world! * */ public class App { public static void main(String[] args) throws NotFoundException, CannotCompileException, InstantiationException, IllegalAccessException, ClassNotFoundException { //~加上報錯,和類加載有關係,這裏new的話會把Hello類加載,以後再加載的話就會報錯 //Hello hell=new Hello(); //hell.sayHello(); //~ CtClass ctClass = ClassPool.getDefault().getCtClass("JavassistTest.JavassistTest.Hello"); CtMethod ctMethod = ctClass.getDeclaredMethod("sayHello"); ctMethod.setBody("System.out.println(\"hi\");"); Class ch=ctClass.toClass(); Hello h=(Hello) ch.newInstance(); h.sayHello(); Hello hel=new Hello(); hel.sayHello();
} }
輸出結果:get
hi
hiio
結果同樣,說明是class被修改了。class