diff --git a/pom.xml b/pom.xml
index a9f4f38..5b15e24 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
it.aboutbits
spring-boot-toolbox
- 2.4.1
+ 2.4.2-RC1
Utility library for Spring Boot projects.
jar
diff --git a/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java b/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java
index 9bcd0fc..195feb7 100644
--- a/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java
+++ b/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java
@@ -6,19 +6,27 @@
import org.jspecify.annotations.NullMarked;
import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@NullMarked
public final class ClassScannerUtil {
+ private static final Map CACHE = new ConcurrentHashMap<>();
+
private ClassScannerUtil() {
}
public static ClassScanner getScannerForPackages(String... packages) {
- return new ClassScanner(packages);
+ var cacheKey = Arrays.stream(packages)
+ .sorted()
+ .collect(Collectors.joining("|"));
+ return CACHE.computeIfAbsent(cacheKey, _ -> new ClassScanner(packages));
}
- public static final class ClassScanner implements AutoCloseable {
+ public static final class ClassScanner {
private final ScanResult scanResult;
private final String[] packages;
@@ -51,10 +59,5 @@ public Set> getClassesAnnotatedWith(Class extends Annotation> clazz)
ClassInfo::loadClass
).collect(Collectors.toSet());
}
-
- @Override
- public void close() {
- scanResult.close();
- }
}
}