From 9ca3acf1c03eff90d34691e2ed01be9321889c3b Mon Sep 17 00:00:00 2001 From: xeounxzxu Date: Mon, 9 Dec 2024 21:28:08 +0900 Subject: [PATCH 1/2] Fix Add Multiple DeferredRepositoryInitializationListener in `RepositoryConfigurationDelegate` --- .../RepositoryConfigurationDelegate.java | 16 ++++++++------- ...ositoryConfigurationDelegateUnitTests.java | 20 +++++++++++++++++-- 2 files changed, 27 insertions(+), 9 deletions(-) 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 136b9a12ad..80b80568da 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java @@ -92,7 +92,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; @@ -117,7 +117,7 @@ public RepositoryConfigurationDelegate(RepositoryConfigurationSource configurati * {@link Environment}. */ private static Environment defaultEnvironment(@Nullable Environment environment, - @Nullable ResourceLoader resourceLoader) { + @Nullable ResourceLoader resourceLoader) { if (environment != null) { return environment; @@ -136,7 +136,7 @@ private static Environment defaultEnvironment(@Nullable Environment environment, * @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.", // @@ -222,7 +222,7 @@ public List registerRepositoriesIn(BeanDefinitionRegist } private void registerAotComponents(BeanDefinitionRegistry registry, RepositoryConfigurationExtension extension, - Map> metadataByRepositoryBeanName) { + Map> metadataByRepositoryBeanName) { BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder .rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE); @@ -245,7 +245,7 @@ private void registerAotComponents(BeanDefinitionRegistry registry, RepositoryCo * @param registry must not be {@literal null}. */ private static void potentiallyLazifyRepositories(Map> configurations, - BeanDefinitionRegistry registry, BootstrapMode mode) { + BeanDefinitionRegistry registry, BootstrapMode mode) { if (!DefaultListableBeanFactory.class.isInstance(registry) || BootstrapMode.DEFAULT.equals(mode)) { return; @@ -272,8 +272,10 @@ private static void potentiallyLazifyRepositories(Map configClass) { + private static ListableBeanFactory assertLazyRepositoryBeanSetup(Class... componentClasses) { - var context = new AnnotationConfigApplicationContext(configClass); + var context = new AnnotationConfigApplicationContext(componentClasses); assertThat(context.getDefaultListableBeanFactory().getAutowireCandidateResolver()) .isInstanceOf(LazyRepositoryInjectionPointResolver.class); @@ -309,6 +319,12 @@ static class LazyConfig {} bootstrapMode = BootstrapMode.DEFERRED) static class DeferredConfig {} + @ComponentScan(basePackageClasses = ProductRepository.class) + @EnableRepositories(basePackageClasses = ProductRepository.class, + includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = AddressRepository.class), + bootstrapMode = BootstrapMode.DEFERRED) + static class OtherDeferredConfig {} + @EnableRepositories(basePackageClasses = MyOtherRepository.class, includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MyOtherRepository.class), excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MyOtherRepositoryImpl.class)) From 8f49485acea46bbdb88d0b14362d720324b0a289 Mon Sep 17 00:00:00 2001 From: xeounxzxu Date: Sat, 14 Dec 2024 14:47:00 +0900 Subject: [PATCH 2/2] Style Apply Formatting --- .../RepositoryConfigurationDelegate.java | 21 +++++-------------- ...ositoryConfigurationDelegateUnitTests.java | 14 ++++++------- 2 files changed, 12 insertions(+), 23 deletions(-) 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 80b80568da..57d3ff53f6 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java @@ -15,28 +15,13 @@ */ 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.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 +42,10 @@ 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 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 0acac64010..83a83eb901 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.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}. *