diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/AbstractRepositoryConfigurationSourceSupport.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/AbstractRepositoryConfigurationSourceSupport.java index 7d5986be7f4..6a68a87d043 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/AbstractRepositoryConfigurationSourceSupport.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/AbstractRepositoryConfigurationSourceSupport.java @@ -17,26 +17,21 @@ package org.springframework.boot.autoconfigure.data; import java.lang.annotation.Annotation; -import java.util.Collection; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; import org.springframework.context.EnvironmentAware; +import org.springframework.context.ResourceLoaderAware; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.env.Environment; -import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.StandardAnnotationMetadata; import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource; -import org.springframework.data.repository.config.RepositoryBeanDefinitionBuilder; -import org.springframework.data.repository.config.RepositoryBeanNameGenerator; -import org.springframework.data.repository.config.RepositoryConfiguration; +import org.springframework.data.repository.config.RepositoryConfigurationDelegate; import org.springframework.data.repository.config.RepositoryConfigurationExtension; /** @@ -48,10 +43,10 @@ import org.springframework.data.repository.config.RepositoryConfigurationExtensi * @author Oliver Gierke */ public abstract class AbstractRepositoryConfigurationSourceSupport implements - BeanFactoryAware, ImportBeanDefinitionRegistrar, BeanClassLoaderAware, + BeanFactoryAware, ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware { - private ClassLoader beanClassLoader; + private ResourceLoader resourceLoader; private BeanFactory beanFactory; @@ -60,45 +55,21 @@ public abstract class AbstractRepositoryConfigurationSourceSupport implements @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, final BeanDefinitionRegistry registry) { - - ResourceLoader resourceLoader = new DefaultResourceLoader(); - AnnotationRepositoryConfigurationSource configurationSource = getConfigurationSource(); - RepositoryConfigurationExtension extension = getRepositoryConfigurationExtension(); - extension.registerBeansForRoot(registry, configurationSource); - - RepositoryBeanNameGenerator generator = new RepositoryBeanNameGenerator(); - generator.setBeanClassLoader(this.beanClassLoader); - - Collection> repositoryConfigurations = extension - .getRepositoryConfigurations(configurationSource, resourceLoader); - - for (RepositoryConfiguration repositoryConfiguration : repositoryConfigurations) { - RepositoryBeanDefinitionBuilder builder = new RepositoryBeanDefinitionBuilder( - repositoryConfiguration, extension); - BeanDefinitionBuilder definitionBuilder = builder.build(registry, - resourceLoader); - extension.postProcess(definitionBuilder, configurationSource); - - String beanName = generator.generateBeanName( - definitionBuilder.getBeanDefinition(), registry); - registry.registerBeanDefinition(beanName, - definitionBuilder.getBeanDefinition()); - } + new RepositoryConfigurationDelegate(getConfigurationSource(), this.resourceLoader) + .registerRepositoriesIn(registry, getRepositoryConfigurationExtension()); } private AnnotationRepositoryConfigurationSource getConfigurationSource() { StandardAnnotationMetadata metadata = new StandardAnnotationMetadata( getConfiguration(), true); - AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource( - metadata, getAnnotation(), this.environment) { - + return new AnnotationRepositoryConfigurationSource(metadata, getAnnotation(), + this.environment) { @Override public java.lang.Iterable getBasePackages() { return AbstractRepositoryConfigurationSourceSupport.this .getBasePackages(); }; }; - return configurationSource; } protected Iterable getBasePackages() { @@ -121,8 +92,8 @@ public abstract class AbstractRepositoryConfigurationSourceSupport implements protected abstract RepositoryConfigurationExtension getRepositoryConfigurationExtension(); @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.beanClassLoader = classLoader; + public void setResourceLoader(ResourceLoader resourceLoader) { + this.resourceLoader = resourceLoader; } @Override @@ -134,4 +105,5 @@ public abstract class AbstractRepositoryConfigurationSourceSupport implements public void setEnvironment(Environment environment) { this.environment = environment; } + } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/JpaRepositoriesAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/JpaRepositoriesAutoConfigurationTests.java index 856e07880d8..f902d330ef9 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/JpaRepositoriesAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/JpaRepositoriesAutoConfigurationTests.java @@ -21,12 +21,15 @@ import javax.persistence.EntityManagerFactory; import org.junit.Test; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; +import org.springframework.boot.autoconfigure.data.alt.CityMongoDbRepository; import org.springframework.boot.autoconfigure.data.jpa.City; import org.springframework.boot.autoconfigure.data.jpa.CityRepository; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.transaction.PlatformTransactionManager; @@ -78,7 +81,7 @@ public class JpaRepositoriesAutoConfigurationTests { } @Configuration - @EnableJpaRepositories(basePackageClasses = org.springframework.boot.autoconfigure.data.alt.CityJpaRepository.class) + @EnableJpaRepositories(basePackageClasses = org.springframework.boot.autoconfigure.data.alt.CityJpaRepository.class, excludeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, value = CityMongoDbRepository.class) }) @TestAutoConfigurationPackage(City.class) protected static class CustomConfiguration { diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index e39b85f3362..2c0b80844e0 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -45,8 +45,8 @@ 4.0.1.RELEASE 3.0.0.RELEASE 2.2.4.RELEASE - 1.4.3.RELEASE - 1.3.3.RELEASE + 1.5.0.RC1 + 1.4.0.RC1 1.1.1.RELEASE 1.2.1.RELEASE 1.1.0.RELEASE