File tree Expand file tree Collapse file tree
src/main/java/it/aboutbits/springboot/toolbox/reflection/util Expand file tree Collapse file tree Original file line number Diff line number Diff line change 66import org .jspecify .annotations .NullMarked ;
77
88import java .lang .annotation .Annotation ;
9+ import java .util .Arrays ;
10+ import java .util .Map ;
911import java .util .Set ;
12+ import java .util .concurrent .ConcurrentHashMap ;
1013import java .util .stream .Collectors ;
1114
1215@ NullMarked
1316public final class ClassScannerUtil {
17+ private static final Map <String , ClassScanner > CACHE = new ConcurrentHashMap <>();
18+
1419 private ClassScannerUtil () {
1520 }
1621
1722 public static ClassScanner getScannerForPackages (String ... packages ) {
18- return new ClassScanner (packages );
23+ var cacheKey = Arrays .stream (packages )
24+ .sorted ()
25+ .collect (Collectors .joining ("|" ));
26+ return CACHE .computeIfAbsent (cacheKey , _ -> new ClassScanner (packages ));
1927 }
2028
2129 public static final class ClassScanner implements AutoCloseable {
@@ -54,7 +62,7 @@ public Set<Class<?>> getClassesAnnotatedWith(Class<? extends Annotation> clazz)
5462
5563 @ Override
5664 public void close () {
57- scanResult . close ();
65+ // No-op: this scanner is cached and its lifecycle is managed by ClassScannerUtil.
5866 }
5967 }
6068}
You can’t perform that action at this time.
0 commit comments