DATACMNS-1497 - Configuration infrastructure now considers scanning BeanNameGenerator.

We now implement the newly introduced ImportBeanDefinitionRegistrar overload additional provided with a BeanNameGenerator configured for the import scanning. We forward this into our bean name generation infrastructure as fallback.

Related tickets: spring-projects/spring-framework#22591
This commit is contained in:
Oliver Drotbohm
2019-03-14 21:59:48 +01:00
parent c4a51f1c24
commit 753d8bbb33
8 changed files with 102 additions and 23 deletions

View File

@@ -27,6 +27,8 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.env.StandardEnvironment;
@@ -64,7 +66,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
AnnotationMetadata metadata = new StandardAnnotationMetadata(SampleConfiguration.class, true);
registrar.registerBeanDefinitions(metadata, registry);
registrar.registerBeanDefinitions(metadata, registry, null);
assertBeanDefinitionRegisteredFor("myRepository");
assertBeanDefinitionRegisteredFor("composedRepository");
@@ -78,7 +80,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
AnnotationMetadata metadata = new StandardAnnotationMetadata(FragmentExclusionConfiguration.class, true);
registrar.registerBeanDefinitions(metadata, registry);
registrar.registerBeanDefinitions(metadata, registry, null);
assertBeanDefinitionRegisteredFor("repositoryWithFragmentExclusion");
assertNoBeanDefinitionRegisteredFor("excludedRepositoryImpl");
@@ -89,7 +91,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
AnnotationMetadata metadata = new StandardAnnotationMetadata(LimitsImplementationBasePackages.class, true);
registrar.registerBeanDefinitions(metadata, registry);
registrar.registerBeanDefinitions(metadata, registry, null);
assertBeanDefinitionRegisteredFor("personRepository");
assertNoBeanDefinitionRegisteredFor("fragmentImpl");
@@ -98,17 +100,30 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
@Test // DATACMNS-360
public void registeredProfileRepositoriesIfProfileActivated() {
StandardAnnotationMetadata metadata = new StandardAnnotationMetadata(SampleConfiguration.class, true);
AnnotationMetadata metadata = new StandardAnnotationMetadata(SampleConfiguration.class, true);
environment.setActiveProfiles("profile");
DummyRegistrar registrar = new DummyRegistrar();
registrar.setEnvironment(environment);
registrar.registerBeanDefinitions(metadata, registry);
registrar.registerBeanDefinitions(metadata, registry, null);
assertBeanDefinitionRegisteredFor("myRepository", "profileRepository");
}
@Test // DATACMNS-1497
public void usesBeanNameGeneratorProvided() {
AnnotationMetadata metadata = new StandardAnnotationMetadata(SampleConfiguration.class, true);
BeanNameGenerator delegate = new AnnotationBeanNameGenerator();
DummyRegistrar registrar = new DummyRegistrar();
registrar.setEnvironment(environment);
registrar.registerBeanDefinitions(metadata, registry,
(definition, registry) -> delegate.generateBeanName(definition, registry).concat("Hello"));
assertBeanDefinitionRegisteredFor("myRepositoryHello");
}
private void assertBeanDefinitionRegisteredFor(String... names) {
for (String name : names) {

View File

@@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefiniti
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.context.annotation.ScannedGenericBeanDefinition;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
@@ -48,7 +49,8 @@ public class RepositoryBeanNameGeneratorUnitTests {
@Before
public void setUp() {
this.generator = new RepositoryBeanNameGenerator(Thread.currentThread().getContextClassLoader());
this.generator = new RepositoryBeanNameGenerator(Thread.currentThread().getContextClassLoader(),
new AnnotationBeanNameGenerator());
}
@Test