field.getAnnotations()在tomcat服务器上运行时返回空数组,但在独立运行时返回正确的注释

时间:2015-03-17 03:46:04

标签: java tomcat

我正在尝试在我的应用程序中动态创建和加载一个类。该类在其中一个成员字段上有注释(" 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);
    }

0 个答案:

没有答案