<dependency> <groupId>io.github.brettw</groupId> <artifactId>jitescript</artifactId> <version>1.4</version> </dependency> import jdk.internal.org.objectweb.asm.ClassWriter; import static jdk.internal.org.objectweb.asm.Opcodes.*; public class JitescriptExample { public static void main(String[] args) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "DynamicClass", null, "java/lang/Object", null); cw.visitEnd(); byte[] bytecode = cw.toByteArray(); CustomClassLoader classLoader = new CustomClassLoader(); Class<?> dynamicClass = classLoader.defineClass("DynamicClass", bytecode); } static class CustomClassLoader extends ClassLoader { public Class<?> defineClass(String name, byte[] bytecode) { return defineClass(name, bytecode, 0, bytecode.length); } } } import jdk.internal.org.objectweb.asm.ClassWriter; import static jdk.internal.org.objectweb.asm.Opcodes.*; public class JitescriptExample { public static void main(String[] args) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "DynamicClass", null, "java/lang/Object", null); cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "dynamicMethod", "()V", null, null).visitEnd(); cw.visitField(ACC_PUBLIC + ACC_STATIC, "dynamicField", "Ljava/lang/String;", null, null); cw.visitEnd(); byte[] bytecode = cw.toByteArray(); CustomClassLoader classLoader = new CustomClassLoader(); Class<?> dynamicClass = classLoader.defineClass("DynamicClass", bytecode); } static class CustomClassLoader extends ClassLoader { public Class<?> defineClass(String name, byte[] bytecode) { return defineClass(name, bytecode, 0, bytecode.length); } } } import jdk.internal.org.objectweb.asm.ClassWriter; import static jdk.internal.org.objectweb.asm.Opcodes.*; import java.io.FileOutputStream; import java.lang.reflect.Method; public class JitescriptExample { public static void main(String[] args) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "DynamicClass", null, "java/lang/Object", null); cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "dynamicMethod", "()V", null, null).visitEnd(); cw.visitField(ACC_PUBLIC + ACC_STATIC, "dynamicField", "Ljava/lang/String;", null, null); cw.visitEnd(); byte[] bytecode = cw.toByteArray(); FileOutputStream fos = new FileOutputStream("DynamicClass.class"); fos.write(bytecode); fos.close(); CustomClassLoader classLoader = new CustomClassLoader(); Class<?> dynamicClass = classLoader.defineClass("DynamicClass", bytecode); Method dynamicMethod = dynamicClass.getDeclaredMethod("dynamicMethod"); dynamicMethod.invoke(null); } static class CustomClassLoader extends ClassLoader { public Class<?> defineClass(String name, byte[] bytecode) { return defineClass(name, bytecode, 0, bytecode.length); } } }


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