我的目的是在运行时将新属性 + getter setter 方法动态注入到类定义中。目前我有一种方法可以使用新添加的属性重新生成代码,然后编译生成的代码。
最初,我将在编译时为每个类创建一个模板。在运行项目时,模板类被加载到运行时。我写了一些代码来动态生成java代码并编译它。当我使用下面的代码加载新创建的类时,我无法访问注入的方法。我认为我无法覆盖现有的运行时定义。我浏览了很多博客,但仍然不明白为什么。请帮忙。
我正在访问 DROOLS 中新添加的方法,并且它没有在任何其他类中引用,这可能会在编译期间引发问题。具有新属性的规则引擎的规则在运行时更新,因此我需要相应地调整我的代码。下面是类加载器代码。此代码不会引发任何异常,但无法解决我的目的。不确定编码是否正确。
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;
}