命名要通过反射读取的类的注释

时间:2012-08-02 10:25:21

标签: java reflection annotations

我的应用程序允许开发人员创建一些插件。 Сcompliance与基本抽象类确定的要求。每个插件都必须有一个名称。我想通过使用注释来解决这个问题。所以,我定义了我自己的注释名称,如下所示:

@Retention(RetentionPolicy.RUNTIME)
public @interface Name {
public String value();
}

我将这个注释和基础抽象类CommonPlugin放入单独的模块中,并将其构建为JAR文件以与开发人员共享。

然后我导入包并在我测试插件的防御之前放置这个注释,如下所示:

@Name("Test plugin")
public class TestPlugin extends CommonPlugin {

然后我通过URLClassLoader反映所有给定的插件,并且在TestPlugin类中找不到必要的注释。但是,如果我将Name注释定义到TestPlugin类的同一个包中,我可以找到它。它应该是这样,还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

将我的感情转化为答案,以便接受。

确保非限定名称Name在所有源文件中引用相同的限定名称。在来自不同包的源而不是包含注释的包中,Name应该有非通配符导入,并且在该其他包本身中不应该有该名称的类。