cw.visit(V1_5, ACC_PUBLIC, className, null, "org/springframework/expression/spel/CompiledExpression", null);
/** * Generate a new class for the given {@link PersistentEntity}. * * @param internalClassName * @param entity * @param constructor * @return */ public byte[] generateBytecode(String internalClassName, PersistentEntity<?, ?> entity, @Nullable PreferredConstructor<?, ?> constructor) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); cw.visit(Opcodes.V1_6, ACC_PUBLIC + ACC_SUPER, internalClassName.replace('.', '/'), null, JAVA_LANG_OBJECT, IMPLEMENTED_INTERFACES); visitDefaultConstructor(cw); visitCreateMethod(cw, entity, constructor); cw.visitEnd(); return cw.toByteArray(); }
cw.visit(Opcodes.V11, Opcodes.ACC_PUBLIC, className,
byte[] generateClassBytecode(String className, Class<? extends DataSerializable> clazz, int classId) { ClassWriter cw = new ClassWriter(0); cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, className, null, INSTANTIATOR_NAME, new String[] { SERIALIZABLE_NAME }); FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, CLASS_FIELD_NAME, CLASS_DESCRIPTOR, null, null);
cw.visit(V1_5, ACC_PUBLIC, className, null, "org/springframework/expression/spel/CompiledExpression", null);
byte[] generateClassBytecode(String className, Class<? extends DataSerializable> clazz, int classId) { ClassWriter cw = new ClassWriter(0); cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, className, null, INSTANTIATOR_NAME, new String[] { SERIALIZABLE_NAME }); FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, CLASS_FIELD_NAME, CLASS_DESCRIPTOR, null, null);
cw.visit(V1_5, ACC_PUBLIC, className, null, "org/springframework/expression/spel/CompiledExpression", null);
/** * Generate a new class for the given {@link PersistentEntity}. */ static byte[] generateBytecode(String internalClassName, PersistentEntity<?, ?> entity) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); cw.visit(Opcodes.V1_6, ACC_PUBLIC + ACC_SUPER, internalClassName, null, JAVA_LANG_OBJECT, IMPLEMENTED_INTERFACES); List<PersistentProperty<?>> persistentProperties = getPersistentProperties(entity); visitFields(entity, persistentProperties, cw); visitDefaultConstructor(entity, internalClassName, cw); visitStaticInitializer(entity, persistentProperties, internalClassName, cw); visitBeanGetter(entity, internalClassName, cw); visitSetProperty(entity, persistentProperties, internalClassName, cw); visitGetProperty(entity, persistentProperties, internalClassName, cw); cw.visitEnd(); return cw.toByteArray(); }
/** * 创建一个类 * @param classGenerator * @return */ public static Class<?> generatorClass(ClassGeneratorEntity classGenerator) throws IOException { ClassWriter cw; if (classGenerator.getVisitClass() != null) { throw new RuntimeException("method not implement"); /*try { Class.forName(classGenerator.getVisitClass().getName()); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } ClassReader classReader = new ClassReader(classGenerator.getVisitClass().getName()); cw = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS);*/ } else { cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); visitDefaultConstructor(cw); } cw.visit(Opcodes.V1_6, ACC_PUBLIC + ACC_SUPER, classGenerator.getGeneratorName(), null, JAVA_LANG_OBJECT, null); visitAddFiled(cw,classGenerator); visitGetMethod(cw,classGenerator); visitSetMethod(cw, classGenerator); cw.visitEnd(); return classLoader.defineClass(classGenerator.getName(), cw.toByteArray()); }