<dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.27.0-GA</version> </dependency> import javassist.*; public class JavassistUtil { public static void addField(ClassPool pool, String className, String fieldName, CtClass fieldType) throws NotFoundException, CannotCompileException { CtClass ctClass = pool.get(className); CtField ctField = new CtField(fieldType, fieldName, ctClass); ctClass.addField(ctField); } public static void addMethod(ClassPool pool, String className, String methodName, CtClass returnType, CtClass[] parameterTypes, String methodBody) throws NotFoundException, CannotCompileException { CtClass ctClass = pool.get(className); CtMethod ctMethod = new CtMethod(returnType, methodName, parameterTypes, ctClass); ctMethod.setBody(methodBody); ctClass.addMethod(ctMethod); } } public class Main { public static void main(String[] args) throws NotFoundException, CannotCompileException, InstantiationException, IllegalAccessException { ClassPool pool = ClassPool.getDefault(); CtClass ctClass = pool.get("com.example.MyClass"); CtClass fieldType = pool.get("java.lang.String"); JavassistUtil.addField(pool, "com.example.MyClass", "newField", fieldType); CtClass returnType = pool.get("void"); CtClass[] parameterTypes = new CtClass[]{}; String methodBody = "{ System.out.println(\"Hello, dynamic method!\"); }"; JavassistUtil.addMethod(pool, "com.example.MyClass", "newMethod", returnType, parameterTypes, methodBody); Class modifiedClass = ctClass.toClass(); Object object = modifiedClass.newInstance(); } }


上一篇:
下一篇:
切换中文