Skip to content

Commit ecb6ebc

Browse files
committed
fix memory leak
1 parent f4c2d0f commit ecb6ebc

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,24 @@
66
import org.jspecify.annotations.NullMarked;
77

88
import java.lang.annotation.Annotation;
9+
import java.util.Arrays;
10+
import java.util.Map;
911
import java.util.Set;
12+
import java.util.concurrent.ConcurrentHashMap;
1013
import java.util.stream.Collectors;
1114

1215
@NullMarked
1316
public 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
}

0 commit comments

Comments
 (0)