<dependencies> <!-- ActiveJ Core --> <dependency> <groupId>org.activej</groupId> <artifactId>activej</artifactId> <version>${activej.version}</version> </dependency> </dependencies> import org.activej.codegen.DefiningClassLoader; import org.activej.codegen.ClassBuilder; import org.activej.codegen.ClassDefiningClassLoader; import org.activej.codegen.DefiningClassLoader; public interface User { String getName(); void setName(String name); } import org.activej.codegen.DefiningClassLoader; import org.activej.codegen.ClassBuilder; import org.activej.codegen.ClassDefiningClassLoader; import org.activej.inject.Injector; import org.junit.Test; import java.nio.file.Path; import java.nio.file.Paths; public class UserCodegenTest { @Test public void testClassGenerator() { ClassDefiningClassLoader classLoader = DefiningClassLoader.create(); ClassBuilder<?> classBuilder = ClassBuilder.create(classLoader) .withClass(def -> def .withMethod(methodDef -> methodDef .withName("getName") .withDefining(is -> is .add(ByteCodeExpressions.loadThis()) .add(ByteCodeExpressions.field(this.nameField, this))) .withReturnType(String.class)) .withMethod(methodDef -> methodDef .withName("setName") .withReturnType(void.class) .withArgument(String.class, "name") .withDefining(is -> is .add(ByteCodeExpressions.loadThis()) .add(ByteCodeExpressions.loadVariable(1)) .add(ByteCodeExpressions.field(this.nameField, this))))); Class<?> generatedClass = classBuilder.build(); User user = Injector.of(User.class) .injectClass(generatedClass) .getInstance(User.class); user.setName("John Doe"); System.out.println(user.getName()); } }


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