【发布时间】:2021-04-19 09:13:27
【问题描述】:
我正在开发一个应用程序,它应该扫描给定类路径中的所有类和接口,并匹配一个实现类以创建 DI。
我有一个注释:
@Target(TYPE)
@Retention(RUNTIME)
public @interface RequiresBinding {
}
还有一个界面:
@RequiresBinding
public interface LowerToUpperSocketCreator {
void createSocket(int lowerToUpperPort);
void setIp(InetAddress ip);
DatagramSocket getSocket();
}
问题是我无法提前知道哪些包使用了这些注解,所以我需要扫描所有有这个注解的可用类。
我试过以下代码:
Reflections reflections1 = new Reflections("", new TypeAnnotationsScanner(), new SubTypesScanner());
Set<Class<?>> bindingProvidingClasses = reflections1.getTypesAnnotatedWith(ProvidesBinding.class);
症状是我无法找到尚未加载的类:在此示例中,与应用程序的 JAR 不同的 JAR 中的类(应用程序依赖于该 JAR)不会被扫描。
如果我将new Reflections("") 命令更改为new Reflections("com"),这意味着不是一个完全虚拟的Reflections 对象,而是一个所有包都以com 开头的对象,我确实能够扫描所有类。
有没有办法扫描类路径中的所有类,而无需任何有关相关包或可用 JAR 的信息?
【问题讨论】:
-
可能类似于
new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.fromClasspath()).addScanners(new TypeAnnotationsScanner(), new SubTypesScanner()))- 注意这是内存不足,名称可能不同。
标签: java reflections