Skip to content

Commit a5681f6

Browse files
committed
DATACMNS-1497 - Polishing.
RepositoryBeanDefinitionRegistrarSupport now also overrides registerBeanDefinitions(AnnotationMetadata, BeanDefinitionRegistry) so that unit test in downstream modules still work. Added defaulting of BeanNameGenerator in XmlRepositoryConfigurationSource so that we use an AnnotationBeanNameGenerator if a DefaultBeanNameGenerator is handed in. Related tickets: spring-projects/spring-framework#22591
1 parent 1150e40 commit a5681f6

File tree

3 files changed

+48
-10
lines changed

3 files changed

+48
-10
lines changed

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

+24-5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.beans.factory.support.BeanNameGenerator;
2525
import org.springframework.context.EnvironmentAware;
2626
import org.springframework.context.ResourceLoaderAware;
27+
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
2728
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
2829
import org.springframework.core.env.Environment;
2930
import org.springframework.core.io.ResourceLoader;
@@ -59,25 +60,43 @@ public void setEnvironment(Environment environment) {
5960
this.environment = environment;
6061
}
6162

63+
/**
64+
* Forwarding to {@link #registerBeanDefinitions(AnnotationMetadata, BeanDefinitionRegistry, BeanNameGenerator)} for
65+
* backwards compatibility reasons so that tests in downstream modules do not accidentally invoke the super type's
66+
* default implementation.
67+
*
68+
* @see org.springframework.context.annotation.ImportBeanDefinitionRegistrar#registerBeanDefinitions(org.springframework.core.type.AnnotationMetadata,
69+
* org.springframework.beans.factory.support.BeanDefinitionRegistry)
70+
* @deprecated since 2.2, call
71+
* {@link #registerBeanDefinitions(AnnotationMetadata, BeanDefinitionRegistry, BeanNameGenerator)}
72+
* instead.
73+
* @see ConfigurationClassPostProcessor#IMPORT_BEAN_NAME_GENERATOR
74+
*/
75+
@Override
76+
@Deprecated
77+
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
78+
registerBeanDefinitions(metadata, registry, ConfigurationClassPostProcessor.IMPORT_BEAN_NAME_GENERATOR);
79+
}
80+
6281
/*
6382
* (non-Javadoc)
6483
* @see org.springframework.context.annotation.ImportBeanDefinitionRegistrar#registerBeanDefinitions(org.springframework.core.type.AnnotationMetadata, org.springframework.beans.factory.support.BeanDefinitionRegistry, org.springframework.beans.factory.support.BeanNameGenerator)
6584
*/
6685
@Override
67-
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry,
86+
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry,
6887
BeanNameGenerator generator) {
6988

70-
Assert.notNull(annotationMetadata, "AnnotationMetadata must not be null!");
89+
Assert.notNull(metadata, "AnnotationMetadata must not be null!");
7190
Assert.notNull(registry, "BeanDefinitionRegistry must not be null!");
7291
Assert.notNull(resourceLoader, "ResourceLoader must not be null!");
7392

7493
// Guard against calls for sub-classes
75-
if (annotationMetadata.getAnnotationAttributes(getAnnotation().getName()) == null) {
94+
if (metadata.getAnnotationAttributes(getAnnotation().getName()) == null) {
7695
return;
7796
}
7897

79-
AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(
80-
annotationMetadata, getAnnotation(), resourceLoader, environment, registry, generator);
98+
AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(metadata,
99+
getAnnotation(), resourceLoader, environment, registry, generator);
81100

82101
RepositoryConfigurationExtension extension = getExtension();
83102
RepositoryConfigurationUtils.exposeRegistration(extension, registry, configurationSource);

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

+20-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
import java.util.Locale;
2020
import java.util.Optional;
2121

22+
import org.springframework.beans.factory.support.BeanNameGenerator;
23+
import org.springframework.beans.factory.support.DefaultBeanNameGenerator;
2224
import org.springframework.beans.factory.xml.ParserContext;
25+
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
2326
import org.springframework.core.env.Environment;
2427
import org.springframework.core.type.filter.TypeFilter;
2528
import org.springframework.data.config.ConfigurationUtils;
@@ -69,7 +72,7 @@ public class XmlRepositoryConfigurationSource extends RepositoryConfigurationSou
6972
public XmlRepositoryConfigurationSource(Element element, ParserContext context, Environment environment) {
7073

7174
super(environment, ConfigurationUtils.getRequiredClassLoader(context.getReaderContext()), context.getRegistry(),
72-
context.getReaderContext().getReader().getBeanNameGenerator());
75+
defaultBeanNameGenerator(context.getReaderContext().getReader().getBeanNameGenerator()));
7376

7477
Assert.notNull(element, "Element must not be null!");
7578

@@ -240,4 +243,20 @@ public BootstrapMode getBootstrapMode() {
240243
? BootstrapMode.valueOf(attribute.toUpperCase(Locale.US)) //
241244
: BootstrapMode.DEFAULT;
242245
}
246+
247+
/**
248+
* Returns the {@link BeanNameGenerator} to use falling back to an {@link AnnotationBeanNameGenerator} if either the
249+
* given generator is {@literal null} or it's {@link DefaultBeanNameGenerator} in particular. This is to make sure we
250+
* only use the given {@link BeanNameGenerator} if it was customized.
251+
*
252+
* @param generator can be {@literal null}.
253+
* @return
254+
* @since 2.2
255+
*/
256+
private static BeanNameGenerator defaultBeanNameGenerator(@Nullable BeanNameGenerator generator) {
257+
258+
return generator == null || DefaultBeanNameGenerator.class.equals(generator.getClass()) //
259+
? new AnnotationBeanNameGenerator() //
260+
: generator;
261+
}
243262
}

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public void registersBeanDefinitionForFoundBean() {
6666

6767
AnnotationMetadata metadata = new StandardAnnotationMetadata(SampleConfiguration.class, true);
6868

69-
registrar.registerBeanDefinitions(metadata, registry, null);
69+
registrar.registerBeanDefinitions(metadata, registry);
7070

7171
assertBeanDefinitionRegisteredFor("myRepository");
7272
assertBeanDefinitionRegisteredFor("composedRepository");
@@ -80,7 +80,7 @@ public void registersBeanDefinitionWithoutFragmentImplementations() {
8080

8181
AnnotationMetadata metadata = new StandardAnnotationMetadata(FragmentExclusionConfiguration.class, true);
8282

83-
registrar.registerBeanDefinitions(metadata, registry, null);
83+
registrar.registerBeanDefinitions(metadata, registry);
8484

8585
assertBeanDefinitionRegisteredFor("repositoryWithFragmentExclusion");
8686
assertNoBeanDefinitionRegisteredFor("excludedRepositoryImpl");
@@ -91,7 +91,7 @@ public void shouldLimitImplementationBasePackages() {
9191

9292
AnnotationMetadata metadata = new StandardAnnotationMetadata(LimitsImplementationBasePackages.class, true);
9393

94-
registrar.registerBeanDefinitions(metadata, registry, null);
94+
registrar.registerBeanDefinitions(metadata, registry);
9595

9696
assertBeanDefinitionRegisteredFor("personRepository");
9797
assertNoBeanDefinitionRegisteredFor("fragmentImpl");
@@ -105,7 +105,7 @@ public void registeredProfileRepositoriesIfProfileActivated() {
105105

106106
DummyRegistrar registrar = new DummyRegistrar();
107107
registrar.setEnvironment(environment);
108-
registrar.registerBeanDefinitions(metadata, registry, null);
108+
registrar.registerBeanDefinitions(metadata, registry);
109109

110110
assertBeanDefinitionRegisteredFor("myRepository", "profileRepository");
111111
}

0 commit comments

Comments
 (0)