Skip to content

Commit 6958157

Browse files
committed
Use TypeScanner instead of ClassPathScanningCandidateComponentProvider.
Closes #1288
1 parent df9cecb commit 6958157

File tree

2 files changed

+18
-49
lines changed

2 files changed

+18
-49
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,14 @@
2525

2626
import org.apache.commons.logging.Log;
2727
import org.apache.commons.logging.LogFactory;
28-
2928
import org.springframework.beans.BeansException;
3029
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
31-
import org.springframework.beans.factory.config.BeanDefinition;
3230
import org.springframework.context.ApplicationContext;
3331
import org.springframework.context.ApplicationContextAware;
3432
import org.springframework.context.annotation.Bean;
35-
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
3633
import org.springframework.context.annotation.Configuration;
3734
import org.springframework.context.annotation.Lazy;
3835
import org.springframework.core.convert.converter.Converter;
39-
import org.springframework.core.type.filter.AnnotationTypeFilter;
4036
import org.springframework.data.convert.CustomConversions;
4137
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
4238
import org.springframework.data.jdbc.core.JdbcAggregateTemplate;
@@ -50,8 +46,8 @@
5046
import org.springframework.data.relational.core.dialect.Dialect;
5147
import org.springframework.data.relational.core.mapping.NamingStrategy;
5248
import org.springframework.data.relational.core.mapping.Table;
49+
import org.springframework.data.util.TypeScanner;
5350
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
54-
import org.springframework.util.ClassUtils;
5551
import org.springframework.util.StringUtils;
5652

5753
/**
@@ -255,31 +251,19 @@ protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
255251
* Scans the given base package for entities, i.e. JDBC-specific types annotated with {@link Table}.
256252
*
257253
* @param basePackage must not be {@literal null}.
258-
* @return
259-
* @throws ClassNotFoundException
254+
* @return a set of classes identified as entities.
260255
* @since 3.0
261256
*/
262-
protected Set<Class<?>> scanForEntities(String basePackage) throws ClassNotFoundException {
257+
@SuppressWarnings("unchecked")
258+
protected Set<Class<?>> scanForEntities(String basePackage) {
263259

264260
if (!StringUtils.hasText(basePackage)) {
265261
return Collections.emptySet();
266262
}
267263

268-
Set<Class<?>> initialEntitySet = new HashSet<>();
269-
270-
if (StringUtils.hasText(basePackage)) {
271-
272-
ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(
273-
false);
274-
componentProvider.addIncludeFilter(new AnnotationTypeFilter(Table.class));
275-
276-
for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
277-
278-
initialEntitySet
279-
.add(ClassUtils.forName(candidate.getBeanClassName(), AbstractJdbcConfiguration.class.getClassLoader()));
280-
}
281-
}
282-
283-
return initialEntitySet;
264+
return TypeScanner.typeScanner(AbstractJdbcConfiguration.class.getClassLoader()) //
265+
.forTypesAnnotatedWith(Table.class) //
266+
.scanPackages(basePackage) //
267+
.collectAsSet();
284268
}
285269
}

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,11 @@
2626
import java.util.Set;
2727

2828
import org.springframework.beans.BeansException;
29-
import org.springframework.beans.factory.config.BeanDefinition;
3029
import org.springframework.context.ApplicationContext;
3130
import org.springframework.context.ApplicationContextAware;
3231
import org.springframework.context.annotation.Bean;
33-
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
3432
import org.springframework.context.annotation.Configuration;
3533
import org.springframework.core.convert.converter.Converter;
36-
import org.springframework.core.type.filter.AnnotationTypeFilter;
3734
import org.springframework.data.convert.CustomConversions;
3835
import org.springframework.data.convert.CustomConversions.StoreConversions;
3936
import org.springframework.data.r2dbc.convert.MappingR2dbcConverter;
@@ -49,10 +46,10 @@
4946
import org.springframework.data.relational.core.conversion.BasicRelationalConverter;
5047
import org.springframework.data.relational.core.mapping.NamingStrategy;
5148
import org.springframework.data.relational.core.mapping.Table;
49+
import org.springframework.data.util.TypeScanner;
5250
import org.springframework.lang.Nullable;
5351
import org.springframework.r2dbc.core.DatabaseClient;
5452
import org.springframework.util.Assert;
55-
import org.springframework.util.ClassUtils;
5653
import org.springframework.util.StringUtils;
5754

5855
/**
@@ -230,8 +227,9 @@ public MappingR2dbcConverter r2dbcConverter(R2dbcMappingContext mappingContext,
230227
/**
231228
* Register custom {@link Converter}s in a {@link CustomConversions} object if required. These
232229
* {@link CustomConversions} will be registered with the {@link BasicRelationalConverter} and
233-
* {@link #r2dbcMappingContext(Optional, R2dbcCustomConversions, RelationalManagedTypes)}. Returns an empty {@link R2dbcCustomConversions}
234-
* instance by default. Override {@link #getCustomConverters()} to supply custom converters.
230+
* {@link #r2dbcMappingContext(Optional, R2dbcCustomConversions, RelationalManagedTypes)}. Returns an empty
231+
* {@link R2dbcCustomConversions} instance by default. Override {@link #getCustomConverters()} to supply custom
232+
* converters.
235233
*
236234
* @return must not be {@literal null}.
237235
* @see #getCustomConverters()
@@ -306,31 +304,18 @@ protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
306304
* Scans the given base package for entities, i.e. R2DBC-specific types annotated with {@link Table}.
307305
*
308306
* @param basePackage must not be {@literal null}.
309-
* @return
310-
* @throws ClassNotFoundException
307+
* @return a set of classes identified as entities.
311308
* @since 3.0
312309
*/
313-
protected Set<Class<?>> scanForEntities(String basePackage) throws ClassNotFoundException {
310+
protected Set<Class<?>> scanForEntities(String basePackage) {
314311

315312
if (!StringUtils.hasText(basePackage)) {
316313
return Collections.emptySet();
317314
}
318315

319-
Set<Class<?>> initialEntitySet = new HashSet<>();
320-
321-
if (StringUtils.hasText(basePackage)) {
322-
323-
ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(
324-
false);
325-
componentProvider.addIncludeFilter(new AnnotationTypeFilter(Table.class));
326-
327-
for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
328-
329-
initialEntitySet
330-
.add(ClassUtils.forName(candidate.getBeanClassName(), AbstractR2dbcConfiguration.class.getClassLoader()));
331-
}
332-
}
333-
334-
return initialEntitySet;
316+
return TypeScanner.typeScanner(AbstractR2dbcConfiguration.class.getClassLoader()) //
317+
.forTypesAnnotatedWith(Table.class) //
318+
.scanPackages(basePackage) //
319+
.collectAsSet();
335320
}
336321
}

0 commit comments

Comments
 (0)