这是很容易用Javassist:
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
static Class<? extends DefinitionBasedMigrator> createClass(String fullName)
throws NotFoundException, CannotCompileException
{
ClassPool pool = ClassPool.getDefault();
// Create the class.
CtClass subClass = pool.makeClass(fullName);
final CtClass superClass = pool.get(DefinitionBasedMigrator.class.getName());
subClass.setSuperclass(superClass);
subClass.setModifiers(Modifier.PUBLIC);
// Add a constructor which will call super(...);
CtClass[] params = new CtClass[]{
pool.get(MigratorDefinition.class.getName()),
pool.get(GlobalConfiguration.class.getName())
};
final CtConstructor ctor = CtNewConstructor.make(params, null, CtNewConstructor.PASS_PARAMS, null, null, subClass);
subClass.addConstructor(ctor);
return subClass.toClass();
}
Maven的依赖性:
<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.22.0-GA</version>
</dependency>
其实我首先看了代理,但由于复杂性而留下了代码。 Javassist更容易。而且,代理需要一个接口,不能像正常的类那样进一步重写......无论如何+1 –