.
技术上可行的方式
生成源码文件 -> 编译源码 -> 加载类
方式1:javac 编译
可以用 ProcessBuilder 这个类启动 javac 进程,编译源码文件
方式2:Java Compiler API 编译
JDK中的 Java Compiler API 提供了与 javac 对等的编译能力。(示例:InMemoryJavaCompiler)
直接生成字节码 -> 加载类
一般通过字节码操作工具和类库来更改Java Class的字节码。
流行的工具有 ASM、Javassist、cglib、Byte Buddy 等。
很多工具/框架中的动态代理实现中就有用到这些工具。如,Spring框架内置了 cglib
字节码 -> Class
将字节码转换为 Class 发生在类加载过程中(《Java类加