概述
- Javaassist是Java的字节码操作框架,可以动态改变类的实现。
<!-- 添加依赖 -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
public class JavassistTest {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.makeClass("Hello");
CtField ctField = new CtField(pool.get("java.lang.String"), "message", ctClass);
ctField.setModifiers(Modifier.PRIVATE);
ctClass.addMethod(CtNewMethod.setter("setMessage", ctField));
ctClass.addMethod(CtNewMethod.getter("getMessage", ctField));
CtConstructor ctConstructor = new CtConstructor(new CtClass[]{}, ctClass);
ctConstructor.setBody("{this.message = \"Hello World\";}");
ctClass.addConstructor(ctConstructor);
CtMethod ctMethod = new CtMethod(CtClass.voidType, "print", new CtClass[]{}, ctClass);
ctMethod.setModifiers(Modifier.PUBLIC);
ctMethod.setBody("{System.out.println(this.getMessage());}");
ctClass.addMethod(ctMethod);
Object obj = ctClass.toClass().newInstance();
Method method = obj.getClass().getMethod("print");
method.invoke(obj);
}
}