我正在尝试在我的应用程序中动态创建和加载一个类。该类在其中一个成员字段上有注释(" id")。现在我可以轻松地编译和加载类。我可以在目录中看到编译的类,当我在Eclipse中打开它时,我可以看到成员字段有注释。但是当我尝试使用field.getAnnotations()读取此注释时,会发生以下情况:
1)当我独立运行应用程序时,我可以获得注释" Key"。
2)当我在tomcat服务器上运行应用程序时,getAnnotations()方法返回空列表。没有" Key"注释
请注意我的Key Class中有RetentionPolicy.RUNTIME。如何在服务器上运行注释时获取注释?可能需要寻找什么,以解决问题?
PS:一些代码
@Override
public Class<?> createIndexClass(IndexDefinationData createIndex) {
IndexDtoCreator creator = new IndexDtoCreator();
IndexGenerationResult result = creator.process(createIndex); // creates the source file
Class<?> clazz = (activateIndexClass(result)); //compiles and loads the class
try {
java.lang.reflect.Field x = clazz.getDeclaredField("id");
for (Annotation y : x.getAnnotations()) {
System.out.println(y.annotationType() + " " + y.toString());
}
System.out.println(x.isAnnotationPresent(Key.class));
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return clazz;
}
//类加载器
private Class<?> loadClass(String folderName, String fqcn) throws MalformedURLException, ClassNotFoundException {
final URL url = Paths.get(folderName).toUri().toURL();
final ClassLoader loader = new URLClassLoader(new URL[] { url });
return loader.loadClass(fqcn);
}