通常、プラグインを作成していてアプリケーション コードを拡張する必要がない限り、javassist クラスには触れないでください。その場合、メソッドMyPluginEnhancer extends play.classloading.enhancers.Enhancer
を呼び出して javassist クラスのインスタンスを取得できますmakeClass(ApplicationClass appClass)
。
実行可能な例については、 https://github.com/greenlaw110/play-morphia/blob/master/src/play/modules/morphia/MorphiaEnhancer.javaを参照してください。
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;
}