From f827ec705ec7800f5699c754ecd333520c1e672a Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 26 Feb 2018 10:31:50 +0100 Subject: [PATCH] DATACMNS-1263 - Allow configuration inspection-classloader customization. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now allow customizing the configuration inspection-classloader with RepositoryConfigurationExtensionSupport.getConfigurationInspectionClassLoader(…). Subclasses may override this method if a customized/isolated classloader is required. Original pull request: #276. --- ...positoryConfigurationExtensionSupport.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationExtensionSupport.java b/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationExtensionSupport.java index ee4ceb7d0..44f747178 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationExtensionSupport.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationExtensionSupport.java @@ -87,7 +87,8 @@ public abstract class RepositoryConfigurationExtensionSupport implements Reposit for (BeanDefinition candidate : configSource.getCandidates(loader)) { RepositoryConfiguration configuration = getRepositoryConfiguration(candidate, configSource); - Class repositoryInterface = loadRepositoryInterface(configuration, loader); + Class repositoryInterface = loadRepositoryInterface(configuration, + getConfigurationInspectionClassLoader(loader)); if (repositoryInterface == null) { result.add(configuration); @@ -113,6 +114,19 @@ public abstract class RepositoryConfigurationExtensionSupport implements Reposit return result; } + /** + * Returns the {@link ClassLoader} to load repository interfaces for configuration inspection. Subclasses may override + * this method to provide a customized class loader. + * + * @param loader must not be {@literal null}. + * @return the {@link ClassLoader} for repository interfaces configuration inspection. + * @since 2.1 + */ + @Nullable + protected ClassLoader getConfigurationInspectionClassLoader(ResourceLoader loader) { + return loader.getClassLoader(); + } + /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtension#getDefaultNamedQueryLocation() @@ -297,17 +311,16 @@ public abstract class RepositoryConfigurationExtensionSupport implements Reposit /** * Loads the repository interface contained in the given {@link RepositoryConfiguration} using the given - * {@link ResourceLoader}. + * {@link ClassLoader}. * * @param configuration must not be {@literal null}. - * @param loader must not be {@literal null}. + * @param classLoader must not be {@literal null}. * @return the repository interface or {@literal null} if it can't be loaded. */ @Nullable - private Class loadRepositoryInterface(RepositoryConfiguration configuration, ResourceLoader loader) { + private Class loadRepositoryInterface(RepositoryConfiguration configuration, ClassLoader classLoader) { String repositoryInterface = configuration.getRepositoryInterface(); - ClassLoader classLoader = loader.getClassLoader(); try { return org.springframework.util.ClassUtils.forName(repositoryInterface, classLoader);