diff --git a/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java b/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java index 9f20988f3..82adb4449 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java @@ -15,15 +15,6 @@ */ package org.springframework.data.repository.config; -import java.lang.reflect.TypeVariable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jspecify.annotations.Nullable; @@ -32,12 +23,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.DependencyDescriptor; import org.springframework.beans.factory.parsing.BeanComponentDefinition; -import org.springframework.beans.factory.support.AutowireCandidateResolver; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.beans.factory.support.*; import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver; import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.ResolvableType; @@ -57,6 +43,10 @@ import org.springframework.data.util.ClassUtils; import org.springframework.util.Assert; import org.springframework.util.StopWatch; +import java.lang.reflect.TypeVariable; +import java.util.*; +import java.util.stream.Collectors; + /** * Delegate for configuration integration to reuse the general way of detecting repositories. Customization is done by * providing a configuration format specific {@link RepositoryConfigurationSource} (currently either XML or annotations @@ -95,7 +85,7 @@ public class RepositoryConfigurationDelegate { * @param environment must not be {@literal null}. */ public RepositoryConfigurationDelegate(RepositoryConfigurationSource configurationSource, - ResourceLoader resourceLoader, Environment environment) { + ResourceLoader resourceLoader, Environment environment) { this.isXml = configurationSource instanceof XmlRepositoryConfigurationSource; boolean isAnnotation = configurationSource instanceof AnnotationRepositoryConfigurationSource; @@ -120,7 +110,7 @@ public class RepositoryConfigurationDelegate { * {@link Environment}. */ private static Environment defaultEnvironment(@Nullable Environment environment, - @Nullable ResourceLoader resourceLoader) { + @Nullable ResourceLoader resourceLoader) { if (environment != null) { return environment; @@ -139,7 +129,7 @@ public class RepositoryConfigurationDelegate { * @see org.springframework.beans.factory.support.BeanDefinitionRegistry */ public List registerRepositoriesIn(BeanDefinitionRegistry registry, - RepositoryConfigurationExtension extension) { + RepositoryConfigurationExtension extension) { if (logger.isInfoEnabled()) { logger.info(LogMessage.format("Bootstrapping Spring Data %s repositories in %s mode.", // @@ -225,7 +215,7 @@ public class RepositoryConfigurationDelegate { } private void registerAotComponents(BeanDefinitionRegistry registry, RepositoryConfigurationExtension extension, - Map> metadataByRepositoryBeanName) { + Map> metadataByRepositoryBeanName) { BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder .rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE); @@ -248,7 +238,7 @@ public class RepositoryConfigurationDelegate { * @param registry must not be {@literal null}. */ private static void potentiallyLazifyRepositories(Map> configurations, - BeanDefinitionRegistry registry, BootstrapMode mode) { + BeanDefinitionRegistry registry, BootstrapMode mode) { if (!(registry instanceof DefaultListableBeanFactory beanFactory) || BootstrapMode.DEFAULT.equals(mode)) { return; @@ -272,8 +262,11 @@ public class RepositoryConfigurationDelegate { && !beanFactory.containsBean(DeferredRepositoryInitializationListener.class.getName())) { logger.debug("Registering deferred repository initialization listener."); - beanFactory.registerSingleton(DeferredRepositoryInitializationListener.class.getName(), - new DeferredRepositoryInitializationListener(beanFactory)); + + if (!beanFactory.containsBean(DeferredRepositoryInitializationListener.class.getName())) { + beanFactory.registerSingleton(DeferredRepositoryInitializationListener.class.getName(), + new DeferredRepositoryInitializationListener(beanFactory)); + } } } diff --git a/src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java b/src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java index 417681d31..3b2bd4940 100644 --- a/src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java +++ b/src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java @@ -15,13 +15,6 @@ */ package org.springframework.data.repository.config; -import static org.assertj.core.api.Assertions.*; - -import java.lang.reflect.TypeVariable; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mockito; @@ -59,6 +52,13 @@ import org.springframework.data.repository.sample.AddressRepository; import org.springframework.data.repository.sample.AddressRepositoryClient; import org.springframework.data.repository.sample.ProductRepository; +import java.lang.reflect.TypeVariable; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + /** * Unit tests for {@link RepositoryConfigurationDelegate}. *