38
38
*/
39
39
public class ConcurrentReferenceCachingMetadataReaderFactory extends SimpleMetadataReaderFactory {
40
40
41
- private final Map <Resource , MetadataReader > cache = new ConcurrentReferenceHashMap <>();
41
+ private final Map <String , MetadataReader > classNameCache = new ConcurrentReferenceHashMap <>();
42
+
43
+ private final Map <Resource , MetadataReader > resourceCache = new ConcurrentReferenceHashMap <>();
42
44
43
45
/**
44
46
* Create a new {@link ConcurrentReferenceCachingMetadataReaderFactory} instance for
@@ -66,12 +68,22 @@ public ConcurrentReferenceCachingMetadataReaderFactory(ClassLoader classLoader)
66
68
super (classLoader );
67
69
}
68
70
71
+ @ Override
72
+ public MetadataReader getMetadataReader (String className ) throws IOException {
73
+ MetadataReader metadataReader = this .classNameCache .get (className );
74
+ if (metadataReader == null ) {
75
+ metadataReader = super .getMetadataReader (className );
76
+ this .classNameCache .put (className , metadataReader );
77
+ }
78
+ return metadataReader ;
79
+ }
80
+
69
81
@ Override
70
82
public MetadataReader getMetadataReader (Resource resource ) throws IOException {
71
- MetadataReader metadataReader = this .cache .get (resource );
83
+ MetadataReader metadataReader = this .resourceCache .get (resource );
72
84
if (metadataReader == null ) {
73
85
metadataReader = createMetadataReader (resource );
74
- this .cache .put (resource , metadataReader );
86
+ this .resourceCache .put (resource , metadataReader );
75
87
}
76
88
return metadataReader ;
77
89
}
@@ -90,7 +102,8 @@ protected MetadataReader createMetadataReader(Resource resource) throws IOExcept
90
102
* Clear the entire MetadataReader cache, removing all cached class metadata.
91
103
*/
92
104
public void clearCache () {
93
- this .cache .clear ();
105
+ this .classNameCache .clear ();
106
+ this .resourceCache .clear ();
94
107
}
95
108
96
109
}
0 commit comments