要找到Java包中的所有类,我们可以使用Burningwave Core库的ClassHunter。因此,我们首先将以下依赖项添加到pom.xml中:
<dependency> <groupId>org.burningwave</groupId> <artifactId>core</artifactId> <version>8.4.0</version> </dependency>
后续步骤如下:
ComponentSupplier componentSupplier = ComponentContainer.getInstance(); ClassHunter classHunter = componentSupplier.getClassHunter(); CacheableSearchConfig searchConfig = SearchConfig.byCriteria( ClassCriteria.create().allThat((cls) -> { return cls.getPackage().getName().matches(".*springframework.*"); }) ); try (SearchResult searchResult = classHunter.loadInCache(searchConfig).find()) { return searchResult.getClasses(); }
在上面的示例中,默认情况下,在所有运行时类路径中执行搜索,但是,如果我们只想在运行时类路径的某个jar中或在运行时类路径之外的其他jar中进行搜索,则可以明确地指出它们:
ComponentSupplier componentSupplier = ComponentContainer.getInstance(); PathHelper pathHelper = componentSupplier.getPathHelper(); ClassHunter classHunter = componentSupplier.getClassHunter(); CacheableSearchConfig searchConfig = SearchConfig.forPaths( pathHelper.getPaths(path -> path.matches(".*?spring.*?.jar")) ).by( ClassCriteria.create().allThat((cls) -> { return cls.getPackage().getName().matches(".*springframework.*") }) ); try (SearchResult searchResult = classHunter.loadInCache(searchConfig).find()) { return searchResult.getClasses(); }
让我们分解上面的示例:
在forPaths 方法,我们可以添加我们希望所有的绝对路径:两个 文件夹,拉链,JAR,耳朵,战争和JMOD文件将被递归扫描,在这种情况下,我们只扫描名称中包含字符串春天罐子 loadInCache方法将作为输入接收的SearchConfig路径中的所有类加载,然后对缓存的数据执行ClassCriteria的查询。缓存了数据后,甚至可以通过简单地调用findBy方法来利用对已加载路径的更快搜索。
原文链接:http://codingdict.com