Use unique bean name for configuration post processors.
Closes #2760 Original pull request: #2762
This commit is contained in:
committed by
Mark Paluch
parent
4c2b8ac4c8
commit
0bd2714595
@@ -25,7 +25,6 @@ import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
@@ -34,6 +33,7 @@ import org.springframework.beans.factory.parsing.BeanComponentDefinition;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
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.context.annotation.ContextAnnotationAutowireCandidateResolver;
|
||||
@@ -225,15 +225,13 @@ public class RepositoryConfigurationDelegate {
|
||||
String repositoryAotProcessorBeanName = String.format("data-%s.repository-aot-processor" /* might be duplicate */,
|
||||
extension.getModuleIdentifier());
|
||||
|
||||
if (!registry.isBeanNameInUse(repositoryAotProcessorBeanName)) {
|
||||
BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder
|
||||
.rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
|
||||
BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder
|
||||
.rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
repositoryAotProcessor.addPropertyValue("configMap", metadataByRepositoryBeanName);
|
||||
|
||||
repositoryAotProcessor.addPropertyValue("configMap", metadataByRepositoryBeanName);
|
||||
|
||||
registry.registerBeanDefinition(repositoryAotProcessorBeanName, repositoryAotProcessor.getBeanDefinition());
|
||||
}
|
||||
registry.registerBeanDefinition(BeanDefinitionReaderUtils.uniqueBeanName(repositoryAotProcessorBeanName, registry),
|
||||
repositoryAotProcessor.getBeanDefinition());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,8 +23,8 @@ import org.mockito.Mockito;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.mockito.junit.jupiter.MockitoSettings;
|
||||
import org.mockito.quality.Strictness;
|
||||
|
||||
import org.springframework.aop.framework.Advised;
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.beans.factory.ListableBeanFactory;
|
||||
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
|
||||
@@ -194,6 +194,29 @@ class RepositoryConfigurationDelegateUnitTests {
|
||||
assertThat(context.getBeanFactory().getBeanDefinition("fragmentFragment")).isNotNull();
|
||||
}
|
||||
|
||||
@Test // GH-2760
|
||||
void registersAotPostProcessorForDifferentConfigurations() {
|
||||
|
||||
var environment = new StandardEnvironment();
|
||||
var context = new GenericApplicationContext();
|
||||
context.setAllowBeanDefinitionOverriding(false);
|
||||
|
||||
RepositoryConfigurationSource configSource = new AnnotationRepositoryConfigurationSource(
|
||||
AnnotationMetadata.introspect(AnnotatedBeanNamesConfig.class), EnableRepositories.class, context, environment,
|
||||
context.getDefaultListableBeanFactory(), new AnnotationBeanNameGenerator());
|
||||
|
||||
new RepositoryConfigurationDelegate(configSource, context, environment).registerRepositoriesIn(context, extension);
|
||||
|
||||
RepositoryConfigurationSource configSource2 = new AnnotationRepositoryConfigurationSource(
|
||||
AnnotationMetadata.introspect(TestConfig.class), EnableRepositories.class, context, environment,
|
||||
context.getDefaultListableBeanFactory(), new AnnotationBeanNameGenerator());
|
||||
|
||||
new RepositoryConfigurationDelegate(configSource2, context, environment).registerRepositoriesIn(context, extension);
|
||||
|
||||
context.refreshForAotProcessing(new RuntimeHints());
|
||||
assertThat(context.getBeanNamesForType(RepositoryRegistrationAotProcessor.class)).hasSize(2);
|
||||
}
|
||||
|
||||
private static ListableBeanFactory assertLazyRepositoryBeanSetup(Class<?> configClass) {
|
||||
|
||||
var context = new AnnotationConfigApplicationContext(configClass);
|
||||
|
||||
Reference in New Issue
Block a user