私の目的は、実行時に新しい属性 + getter setter メソッドをクラス定義に動的に注入することです。現在、新しく追加された属性を使用してコードを再生成し、生成されたコードをコンパイルする方法があります。
まず、コンパイル時に各クラスのテンプレートを用意します。プロジェクトを実行すると、テンプレート クラスがランタイムに読み込まれます。Javaコードを動的に生成してコンパイルするコードをいくつか書きました。以下のコードを使用して新しく作成したクラスをロードすると、注入されたメソッドにアクセスできません。既存のランタイム定義を上書きできないと思います。たくさんのブログを見てきましたが、それでも理由を理解できませんでした。助けてください。
DROOLS で新しく追加されたメソッドにアクセスしていますが、コンパイル中に問題が発生する可能性がある他のクラスでは参照されていません。新しい属性を持つルール エンジンのルールは実行時に更新されるため、それに応じてコードを調整する必要があります。以下は ClassLoader コードです。このコードは例外をスローしませんが、私の目的を解決できません。コーディングが正しいかどうかはわかりません。
public static boolean loadClass2RunTime() {
try {
File folder = new File("target");
File dir = new File(folder, "com/itap/template");
File[] classFiles = dir.listFiles();
URL[] url = new URL[] { folder.toURI().toURL() };
int i = 0;
for (File classFile : classFiles) {
if (classFile.getName().matches(".*\\.class")) {
System.out.println(classFile.getName().substring(0,
classFile.getName().lastIndexOf(".")));
ClassLoader loader = URLClassLoader
.newInstance(new URL[] { folder.toURI().toURL() });
Class cls = loader.loadClass("com.itap.template."
+ classFile.getName().substring(0,
classFile.getName().lastIndexOf(".")));
ClassLoader temp = cls.getClassLoader();
}
}
return true;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}