Skip to content

Commit 0bd2714

Browse files
christophstroblmp911de
authored andcommitted
Use unique bean name for configuration post processors.
Closes #2760 Original pull request: #2762
1 parent 4c2b8ac commit 0bd2714

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import org.apache.commons.logging.Log;
2727
import org.apache.commons.logging.LogFactory;
28-
2928
import org.springframework.beans.factory.FactoryBean;
3029
import org.springframework.beans.factory.config.BeanDefinition;
3130
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
@@ -34,6 +33,7 @@
3433
import org.springframework.beans.factory.support.AbstractBeanDefinition;
3534
import org.springframework.beans.factory.support.AutowireCandidateResolver;
3635
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
36+
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
3737
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
3838
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
3939
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
@@ -225,15 +225,13 @@ private void registerAotComponents(BeanDefinitionRegistry registry, RepositoryCo
225225
String repositoryAotProcessorBeanName = String.format("data-%s.repository-aot-processor" /* might be duplicate */,
226226
extension.getModuleIdentifier());
227227

228-
if (!registry.isBeanNameInUse(repositoryAotProcessorBeanName)) {
229-
230-
BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder
231-
.rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
228+
BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder
229+
.rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
232230

233-
repositoryAotProcessor.addPropertyValue("configMap", metadataByRepositoryBeanName);
231+
repositoryAotProcessor.addPropertyValue("configMap", metadataByRepositoryBeanName);
234232

235-
registry.registerBeanDefinition(repositoryAotProcessorBeanName, repositoryAotProcessor.getBeanDefinition());
236-
}
233+
registry.registerBeanDefinition(BeanDefinitionReaderUtils.uniqueBeanName(repositoryAotProcessorBeanName, registry),
234+
repositoryAotProcessor.getBeanDefinition());
237235
}
238236

239237
/**

src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.mockito.junit.jupiter.MockitoExtension;
2424
import org.mockito.junit.jupiter.MockitoSettings;
2525
import org.mockito.quality.Strictness;
26-
2726
import org.springframework.aop.framework.Advised;
27+
import org.springframework.aot.hint.RuntimeHints;
2828
import org.springframework.beans.factory.FactoryBean;
2929
import org.springframework.beans.factory.ListableBeanFactory;
3030
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
@@ -194,6 +194,29 @@ void skipsRegistrationOnAlreadyRegisteredBeansUsingAtComponentNames() {
194194
assertThat(context.getBeanFactory().getBeanDefinition("fragmentFragment")).isNotNull();
195195
}
196196

197+
@Test // GH-2760
198+
void registersAotPostProcessorForDifferentConfigurations() {
199+
200+
var environment = new StandardEnvironment();
201+
var context = new GenericApplicationContext();
202+
context.setAllowBeanDefinitionOverriding(false);
203+
204+
RepositoryConfigurationSource configSource = new AnnotationRepositoryConfigurationSource(
205+
AnnotationMetadata.introspect(AnnotatedBeanNamesConfig.class), EnableRepositories.class, context, environment,
206+
context.getDefaultListableBeanFactory(), new AnnotationBeanNameGenerator());
207+
208+
new RepositoryConfigurationDelegate(configSource, context, environment).registerRepositoriesIn(context, extension);
209+
210+
RepositoryConfigurationSource configSource2 = new AnnotationRepositoryConfigurationSource(
211+
AnnotationMetadata.introspect(TestConfig.class), EnableRepositories.class, context, environment,
212+
context.getDefaultListableBeanFactory(), new AnnotationBeanNameGenerator());
213+
214+
new RepositoryConfigurationDelegate(configSource2, context, environment).registerRepositoriesIn(context, extension);
215+
216+
context.refreshForAotProcessing(new RuntimeHints());
217+
assertThat(context.getBeanNamesForType(RepositoryRegistrationAotProcessor.class)).hasSize(2);
218+
}
219+
197220
private static ListableBeanFactory assertLazyRepositoryBeanSetup(Class<?> configClass) {
198221

199222
var context = new AnnotationConfigApplicationContext(configClass);

0 commit comments

Comments
 (0)