gpt4 book ai didi

java - 用于查找包中所有类的反射库

转载 作者:行者123 更新时间:2023-11-29 04:33:09 25 4
gpt4 key购买 nike

我正在使用以下代码查找给定包名称中的所有类。当代码直接放入我的项目时,这很好用。但是,从我放在一起的 Commons Jar 调用服务不会从我的项目返回数据。这可以实现吗?我正在使用 org.reflection.Reflections 库。

public Set<Class<?>> reflectPackage(String packageName){
List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());

Reflections reflections = new Reflections(
new ConfigurationBuilder().setScanners(
new SubTypesScanner(false),
new ResourcesScanner()).setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(
new ClassLoader[0]))).filterInputsBy(
new FilterBuilder().include(FilterBuilder.prefix(packageName))));

return reflections.getSubTypesOf(Object.class);
}

Project Structure 

Eclipse --- Security Base // Project
| |
| --- reflectPackage("com.app.controller") call
| // Note: this package is within this project, not the Commons project.
|
--- Commons // Project
|
--- Reflector // Class
|
--- reflectPackage // Method

最佳答案

我用过Fast Classpath Scanner在我们的一个项目中发现它真的很有用。在类路径扫描方面,它有很多有用的功能。下面显示了一个示例,它将提供有关包内类的信息。它会扫描并查找包/类,即使它们是第三方 jar 的一部分。

public Set<Class<?>> reflectPackage(String packageName) {
final Set<Class<?>> classes = new HashSet<>();
new FastClasspathScanner("your.package.name")
.matchAllClasses(new ClassMatchProcessor() {

@Override
public void processMatch(Class<?> klass) {
classes.add(klass);
}
}).scan();
return classes;
}

关于java - 用于查找包中所有类的反射库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com