From 5906ae04daa97d5a434a301d1b3c83b4f047e34e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 13 Jan 2014 18:31:31 +0100 Subject: [PATCH] DATACMNS-415 - Further performance improvements for repository config. We now also set a resource pattern on the ClassPathScanningCandidateComponentProvider to limit the scanning for custom implementations even more and thus avoid reading a lot of unnecessary class files. --- .../config/RepositoryBeanDefinitionBuilder.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/repository/config/RepositoryBeanDefinitionBuilder.java b/src/main/java/org/springframework/data/repository/config/RepositoryBeanDefinitionBuilder.java index ccffed703..9fb5ec042 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryBeanDefinitionBuilder.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryBeanDefinitionBuilder.java @@ -43,6 +43,7 @@ import org.springframework.util.StringUtils; public class RepositoryBeanDefinitionBuilder { private static final Logger LOGGER = LoggerFactory.getLogger(RepositoryBeanDefinitionBuilder.class); + private static final String CUSTOM_IMPLEMENTATION_RESOURCE_PATTERN = "**/*%s.class"; private final BeanDefinitionRegistry registry; private final RepositoryConfigurationExtension extension; @@ -142,18 +143,19 @@ public class RepositoryBeanDefinitionBuilder { /** * Tries to detect a custom implementation for a repository bean by classpath scanning. * - * @param config - * @param parser + * @param config must not be {@literal null}. * @return the {@code AbstractBeanDefinition} of the custom implementation or {@literal null} if none found */ private AbstractBeanDefinition detectCustomImplementation(RepositoryConfiguration configuration) { // Build pattern to lookup implementation class - Pattern pattern = Pattern.compile(".*\\." + configuration.getImplementationClassName()); + String className = configuration.getImplementationClassName(); + Pattern pattern = Pattern.compile(".*\\." + className); // Build classpath scanner and lookup bean definition ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.setResourceLoader(resourceLoader); + provider.setResourcePattern(String.format(CUSTOM_IMPLEMENTATION_RESOURCE_PATTERN, className)); provider.setMetadataReaderFactory(metadataReaderFactory); provider.addIncludeFilter(new RegexPatternTypeFilter(pattern));