Java - 加载带注释的类

2022-09-01 19:01:20

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

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

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

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

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

此外,如果这可以用最少的第三方库等完成,那将是很酷的 - 如果有可能:)


答案 1

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

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

它返回带批注的所有类。org.home.junkjavax.persistence.Entity

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

for (Class<?> clazz : annotated) {
    final Object newInstance = clazz.newInstance();
}

希望这能回答一切。


答案 2

如果你有Spring(3rd party,对不起:-)),请使用org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider

可以在此 SO 问题中找到代码用法示例


推荐