Browse Source

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
pull/389/head
Oliver Drotbohm 7 years ago
parent
commit
a5681f637c
No known key found for this signature in database
GPG Key ID: 6E42B5787543F690
  1. 29
      src/main/java/org/springframework/data/repository/config/RepositoryBeanDefinitionRegistrarSupport.java
  2. 21
      src/main/java/org/springframework/data/repository/config/XmlRepositoryConfigurationSource.java
  3. 8
      src/test/java/org/springframework/data/repository/config/RepositoryBeanDefinitionRegistrarSupportUnitTests.java

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

@ -24,6 +24,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; @@ -24,6 +24,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
@ -59,25 +60,43 @@ public abstract class RepositoryBeanDefinitionRegistrarSupport @@ -59,25 +60,43 @@ public abstract class RepositoryBeanDefinitionRegistrarSupport
this.environment = environment;
}
/**
* Forwarding to {@link #registerBeanDefinitions(AnnotationMetadata, BeanDefinitionRegistry, BeanNameGenerator)} for
* backwards compatibility reasons so that tests in downstream modules do not accidentally invoke the super type's
* default implementation.
*
* @see org.springframework.context.annotation.ImportBeanDefinitionRegistrar#registerBeanDefinitions(org.springframework.core.type.AnnotationMetadata,
* org.springframework.beans.factory.support.BeanDefinitionRegistry)
* @deprecated since 2.2, call
* {@link #registerBeanDefinitions(AnnotationMetadata, BeanDefinitionRegistry, BeanNameGenerator)}
* instead.
* @see ConfigurationClassPostProcessor#IMPORT_BEAN_NAME_GENERATOR
*/
@Override
@Deprecated
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
registerBeanDefinitions(metadata, registry, ConfigurationClassPostProcessor.IMPORT_BEAN_NAME_GENERATOR);
}
/*
* (non-Javadoc)
* @see org.springframework.context.annotation.ImportBeanDefinitionRegistrar#registerBeanDefinitions(org.springframework.core.type.AnnotationMetadata, org.springframework.beans.factory.support.BeanDefinitionRegistry, org.springframework.beans.factory.support.BeanNameGenerator)
*/
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry,
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry,
BeanNameGenerator generator) {
Assert.notNull(annotationMetadata, "AnnotationMetadata must not be null!");
Assert.notNull(metadata, "AnnotationMetadata must not be null!");
Assert.notNull(registry, "BeanDefinitionRegistry must not be null!");
Assert.notNull(resourceLoader, "ResourceLoader must not be null!");
// Guard against calls for sub-classes
if (annotationMetadata.getAnnotationAttributes(getAnnotation().getName()) == null) {
if (metadata.getAnnotationAttributes(getAnnotation().getName()) == null) {
return;
}
AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(
annotationMetadata, getAnnotation(), resourceLoader, environment, registry, generator);
AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(metadata,
getAnnotation(), resourceLoader, environment, registry, generator);
RepositoryConfigurationExtension extension = getExtension();
RepositoryConfigurationUtils.exposeRegistration(extension, registry, configurationSource);

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

@ -19,7 +19,10 @@ import java.util.Collection; @@ -19,7 +19,10 @@ import java.util.Collection;
import java.util.Locale;
import java.util.Optional;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.beans.factory.support.DefaultBeanNameGenerator;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.core.env.Environment;
import org.springframework.core.type.filter.TypeFilter;
import org.springframework.data.config.ConfigurationUtils;
@ -69,7 +72,7 @@ public class XmlRepositoryConfigurationSource extends RepositoryConfigurationSou @@ -69,7 +72,7 @@ public class XmlRepositoryConfigurationSource extends RepositoryConfigurationSou
public XmlRepositoryConfigurationSource(Element element, ParserContext context, Environment environment) {
super(environment, ConfigurationUtils.getRequiredClassLoader(context.getReaderContext()), context.getRegistry(),
context.getReaderContext().getReader().getBeanNameGenerator());
defaultBeanNameGenerator(context.getReaderContext().getReader().getBeanNameGenerator()));
Assert.notNull(element, "Element must not be null!");
@ -240,4 +243,20 @@ public class XmlRepositoryConfigurationSource extends RepositoryConfigurationSou @@ -240,4 +243,20 @@ public class XmlRepositoryConfigurationSource extends RepositoryConfigurationSou
? BootstrapMode.valueOf(attribute.toUpperCase(Locale.US)) //
: BootstrapMode.DEFAULT;
}
/**
* Returns the {@link BeanNameGenerator} to use falling back to an {@link AnnotationBeanNameGenerator} if either the
* given generator is {@literal null} or it's {@link DefaultBeanNameGenerator} in particular. This is to make sure we
* only use the given {@link BeanNameGenerator} if it was customized.
*
* @param generator can be {@literal null}.
* @return
* @since 2.2
*/
private static BeanNameGenerator defaultBeanNameGenerator(@Nullable BeanNameGenerator generator) {
return generator == null || DefaultBeanNameGenerator.class.equals(generator.getClass()) //
? new AnnotationBeanNameGenerator() //
: generator;
}
}

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

@ -66,7 +66,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests { @@ -66,7 +66,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
AnnotationMetadata metadata = new StandardAnnotationMetadata(SampleConfiguration.class, true);
registrar.registerBeanDefinitions(metadata, registry, null);
registrar.registerBeanDefinitions(metadata, registry);
assertBeanDefinitionRegisteredFor("myRepository");
assertBeanDefinitionRegisteredFor("composedRepository");
@ -80,7 +80,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests { @@ -80,7 +80,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
AnnotationMetadata metadata = new StandardAnnotationMetadata(FragmentExclusionConfiguration.class, true);
registrar.registerBeanDefinitions(metadata, registry, null);
registrar.registerBeanDefinitions(metadata, registry);
assertBeanDefinitionRegisteredFor("repositoryWithFragmentExclusion");
assertNoBeanDefinitionRegisteredFor("excludedRepositoryImpl");
@ -91,7 +91,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests { @@ -91,7 +91,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
AnnotationMetadata metadata = new StandardAnnotationMetadata(LimitsImplementationBasePackages.class, true);
registrar.registerBeanDefinitions(metadata, registry, null);
registrar.registerBeanDefinitions(metadata, registry);
assertBeanDefinitionRegisteredFor("personRepository");
assertNoBeanDefinitionRegisteredFor("fragmentImpl");
@ -105,7 +105,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests { @@ -105,7 +105,7 @@ public class RepositoryBeanDefinitionRegistrarSupportUnitTests {
DummyRegistrar registrar = new DummyRegistrar();
registrar.setEnvironment(environment);
registrar.registerBeanDefinitions(metadata, registry, null);
registrar.registerBeanDefinitions(metadata, registry);
assertBeanDefinitionRegisteredFor("myRepository", "profileRepository");
}

Loading…
Cancel
Save