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.
This commit is contained in:
Oliver Gierke
2014-01-13 18:31:31 +01:00
parent df1373aa81
commit 5906ae04da

View File

@@ -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));