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 clazz) ClassInfo::loadClass ).collect(Collectors.toSet()); } - - @Override - public void close() { - scanResult.close(); - } } }