Skip to content

Commit 5d49268

Browse files
committed
Create MetadataReaderFactory instances with factory methods
Prior to this commit, Spring would create directly `SimpleMetadataReaderFactory` instances or would manually create `CachingMetadataReaderFactory` which extend `SimpleMetadataReaderFactory`. This would prevent usage of the new `ClassFileMetadataReaderFactory` in our internal codebase. This commit replaces manual instantiations with calls to `MetadataReaderFactory` factory methods and makes `CachingMetadataReaderFactory` delegate to another factory created with the same factory methods. This allows internal usage of `ClassFileMetadataReaderFactory` internally. Closes gh-33616
1 parent 4f260a4 commit 5d49268

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
import org.springframework.core.type.AnnotationMetadata;
8484
import org.springframework.core.type.MethodMetadata;
8585
import org.springframework.core.type.classreading.MetadataReaderFactory;
86-
import org.springframework.core.type.classreading.SimpleMetadataReaderFactory;
8786
import org.springframework.javapoet.ClassName;
8887
import org.springframework.javapoet.CodeBlock;
8988
import org.springframework.lang.Nullable;
@@ -284,7 +283,7 @@ public void setBeanFactory(BeanFactory beanFactory) {
284283
"AutowiredAnnotationBeanPostProcessor requires a ConfigurableListableBeanFactory: " + beanFactory);
285284
}
286285
this.beanFactory = clbf;
287-
this.metadataReaderFactory = new SimpleMetadataReaderFactory(clbf.getBeanClassLoader());
286+
this.metadataReaderFactory = MetadataReaderFactory.create(clbf.getBeanClassLoader());
288287
}
289288

290289

spring-core/src/main/java/org/springframework/core/type/classreading/CachingMetadataReaderFactory.java

+14-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -35,11 +35,13 @@
3535
* @author Costin Leau
3636
* @since 2.5
3737
*/
38-
public class CachingMetadataReaderFactory extends SimpleMetadataReaderFactory {
38+
public class CachingMetadataReaderFactory implements MetadataReaderFactory {
3939

4040
/** Default maximum number of entries for a local MetadataReader cache: 256. */
4141
public static final int DEFAULT_CACHE_LIMIT = 256;
4242

43+
private final MetadataReaderFactory delegate;
44+
4345
/** MetadataReader cache: either local or shared at the ResourceLoader level. */
4446
@Nullable
4547
private Map<Resource, MetadataReader> metadataReaderCache;
@@ -50,7 +52,7 @@ public class CachingMetadataReaderFactory extends SimpleMetadataReaderFactory {
5052
* using a local resource cache.
5153
*/
5254
public CachingMetadataReaderFactory() {
53-
super();
55+
this.delegate = MetadataReaderFactory.create((ClassLoader) null);
5456
setCacheLimit(DEFAULT_CACHE_LIMIT);
5557
}
5658

@@ -60,7 +62,7 @@ public CachingMetadataReaderFactory() {
6062
* @param classLoader the ClassLoader to use
6163
*/
6264
public CachingMetadataReaderFactory(@Nullable ClassLoader classLoader) {
63-
super(classLoader);
65+
this.delegate = MetadataReaderFactory.create(classLoader);
6466
setCacheLimit(DEFAULT_CACHE_LIMIT);
6567
}
6668

@@ -72,7 +74,7 @@ public CachingMetadataReaderFactory(@Nullable ClassLoader classLoader) {
7274
* @see DefaultResourceLoader#getResourceCache
7375
*/
7476
public CachingMetadataReaderFactory(@Nullable ResourceLoader resourceLoader) {
75-
super(resourceLoader);
77+
this.delegate = MetadataReaderFactory.create(resourceLoader);
7678
if (resourceLoader instanceof DefaultResourceLoader defaultResourceLoader) {
7779
this.metadataReaderCache = defaultResourceLoader.getResourceCache(MetadataReader.class);
7880
}
@@ -81,7 +83,6 @@ public CachingMetadataReaderFactory(@Nullable ResourceLoader resourceLoader) {
8183
}
8284
}
8385

84-
8586
/**
8687
* Specify the maximum number of entries for the MetadataReader cache.
8788
* <p>Default is 256 for a local cache, whereas a shared cache is
@@ -112,14 +113,18 @@ public int getCacheLimit() {
112113
}
113114
}
114115

116+
@Override
117+
public MetadataReader getMetadataReader(String className) throws IOException {
118+
return this.delegate.getMetadataReader(className);
119+
}
115120

116121
@Override
117122
public MetadataReader getMetadataReader(Resource resource) throws IOException {
118123
if (this.metadataReaderCache instanceof ConcurrentMap) {
119124
// No synchronization necessary...
120125
MetadataReader metadataReader = this.metadataReaderCache.get(resource);
121126
if (metadataReader == null) {
122-
metadataReader = super.getMetadataReader(resource);
127+
metadataReader = this.delegate.getMetadataReader(resource);
123128
this.metadataReaderCache.put(resource, metadataReader);
124129
}
125130
return metadataReader;
@@ -128,14 +133,14 @@ else if (this.metadataReaderCache != null) {
128133
synchronized (this.metadataReaderCache) {
129134
MetadataReader metadataReader = this.metadataReaderCache.get(resource);
130135
if (metadataReader == null) {
131-
metadataReader = super.getMetadataReader(resource);
136+
metadataReader = this.delegate.getMetadataReader(resource);
132137
this.metadataReaderCache.put(resource, metadataReader);
133138
}
134139
return metadataReader;
135140
}
136141
}
137142
else {
138-
return super.getMetadataReader(resource);
143+
return this.delegate.getMetadataReader(resource);
139144
}
140145
}
141146

0 commit comments

Comments
 (0)