使用playframework获取javassist类

使用playframework获取javassist类,java,reflection,playframework,javassist,Java,Reflection,Playframework,Javassist,我正在尝试获取模型类的CtClass引用。我从最简单的版本开始 ClassPool.getDefault.getclassName;而且效果很好。但只在我的机器上。它在服务器上不工作 无论如何,我认为这个版本不应该工作,因为Playframework在tmp/classse中存储类。现在我已经完成了这个版本: ClassPool pool = new ClassPool(); pool.appendClassPath(Play.applicationPath + "/tmp/classes");

我正在尝试获取模型类的CtClass引用。我从最简单的版本开始 ClassPool.getDefault.getclassName;而且效果很好。但只在我的机器上。它在服务器上不工作

无论如何,我认为这个版本不应该工作,因为Playframework在tmp/classse中存储类。现在我已经完成了这个版本:

ClassPool pool = new ClassPool();
pool.appendClassPath(Play.applicationPath + "/tmp/classes");
CtClass cls = pool.get(className);
但我不确定这个版本。它会一直有效吗?有更好的选择吗


我也尝试过使用ClassPath和LoaderClassPath,但没有任何成功。

除非您正在编写插件并需要增强应用程序代码,否则通常不应该接触javassist类。在这种情况下,您将有一个MyPlugineHancer扩展play.classloading.enhancers.Enhancer,然后您可以通过调用makeClassApplicationClass appClass方法来获取javassist类实例

有关可行的示例,请参阅

PS:关于play.classloading.enhancers.Enhancer.makeClass方法实现

/**
 * Construct a javassist CtClass from an application class.
 */
public CtClass makeClass(ApplicationClass applicationClass) throws IOException {
    return classPool.makeClass(new ByteArrayInputStream(applicationClass.enhancedByteCode));
}
其中classPool来自以下代码:

public Enhancer() {
    this.classPool = newClassPool();
}

public static ClassPool newClassPool() {
    ClassPool classPool = new ClassPool();
    classPool.appendSystemPath();
    classPool.appendClassPath(new LoaderClassPath(Enhancer.class.getClassLoader()));
    classPool.appendClassPath(new ApplicationClassesClasspath());
    return classPool;
}

谢谢谢谢你告诉我应该避免使用它;我需要CtClass从注释中读取配置,而标准java.reflection并不能提供我所需要的。