3838 */
3939public class ConcurrentReferenceCachingMetadataReaderFactory extends SimpleMetadataReaderFactory {
4040
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 <>();
4244
4345 /**
4446 * Create a new {@link ConcurrentReferenceCachingMetadataReaderFactory} instance for
@@ -66,12 +68,22 @@ public ConcurrentReferenceCachingMetadataReaderFactory(ClassLoader classLoader)
6668 super (classLoader );
6769 }
6870
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+
6981 @ Override
7082 public MetadataReader getMetadataReader (Resource resource ) throws IOException {
71- MetadataReader metadataReader = this .cache .get (resource );
83+ MetadataReader metadataReader = this .resourceCache .get (resource );
7284 if (metadataReader == null ) {
7385 metadataReader = createMetadataReader (resource );
74- this .cache .put (resource , metadataReader );
86+ this .resourceCache .put (resource , metadataReader );
7587 }
7688 return metadataReader ;
7789 }
@@ -90,7 +102,8 @@ protected MetadataReader createMetadataReader(Resource resource) throws IOExcept
90102 * Clear the entire MetadataReader cache, removing all cached class metadata.
91103 */
92104 public void clearCache () {
93- this .cache .clear ();
105+ this .classNameCache .clear ();
106+ this .resourceCache .clear ();
94107 }
95108
96109}
0 commit comments