Java - 加载带注释的类

Xep*_*ris 23 java annotations classloader

我知道有一套令人难以置信的工具可以在java中加载插件类,但今天我想到了一个想法.

如果我在包"org.home.junk"中有一堆带注释和未注释的类(注释带有注释"@AnnotatedClass"),并且那些类具有带注释"@AnnotatedMethod"的注释方法,该怎么办?

第一个问题:我可以在运行时获取该特定包中所有类的数组/集合,以便我可以检查哪个类被注释并创建它们的实例.(我知道如何检查Some.class是否有本指南的注释:http://isagoksu.com/2009/development/java/creating-custom-annotations-and-making-use-of-them/ )

第二个问题: - 如果我能在第一个问题上做我想做的事 - 那么最政治的方式是什么?

我相信这是可能的,因为我理解JUnit以类似的方式加载测试用例类.

如果这可以用最少的第三方库来完成也是很酷的,再次 - 如果可能的话:)

Kow*_*ser 27

第一个答案:看看这个项目.

Reflections reflections = new Reflections("org.home.junk");
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);
Run Code Online (Sandbox Code Playgroud)

它返回org.home.junk带有javax.persistence.Entity注释的注释的所有类.

第二个答案:要创建上述类的新实例,您可以执行此操作

for (Class<?> clazz : annotated) {
    final Object newInstance = clazz.newInstance();
}
Run Code Online (Sandbox Code Playgroud)

希望这能解决所有问题