Browse Source

Polishing.

Filter Enable…Repositories(fragmentsContributor) attribute values that point to an interface to enable defaulting in Enable…Repositories annotations.

See #3279
issue/3353
Mark Paluch 4 months ago
parent
commit
d3967f2427
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 7
      src/main/java/org/springframework/data/repository/config/AnnotationRepositoryConfigurationSource.java
  2. 23
      src/test/java/org/springframework/data/repository/config/AnnotationRepositoryConfigurationSourceUnitTests.java

7
src/main/java/org/springframework/data/repository/config/AnnotationRepositoryConfigurationSource.java

@ -22,6 +22,7 @@ import java.util.Map; @@ -22,6 +22,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.jspecify.annotations.NonNull;
@ -195,7 +196,11 @@ public class AnnotationRepositoryConfigurationSource extends RepositoryConfigura @@ -195,7 +196,11 @@ public class AnnotationRepositoryConfigurationSource extends RepositoryConfigura
return Optional.empty();
}
return Optional.of(attributes.getClass(REPOSITORY_FRAGMENTS_CONTRIBUTOR_CLASS).getName());
Class<?> fragmentsContributorClass = attributes.getClass(REPOSITORY_FRAGMENTS_CONTRIBUTOR_CLASS);
return Optional.of(fragmentsContributorClass) //
.filter(Predicate.not(Class::isInterface)) // avoid default values that are typically interfaces
.map(Class::getName);
}
/**

23
src/test/java/org/springframework/data/repository/config/AnnotationRepositoryConfigurationSourceUnitTests.java

@ -38,6 +38,7 @@ import org.springframework.data.repository.PagingAndSortingRepository; @@ -38,6 +38,7 @@ import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.config.basepackage.repo.PersonRepository;
import org.springframework.data.repository.core.support.DummyReactiveRepositoryFactory;
import org.springframework.data.repository.core.support.DummyRepositoryFactory;
import org.springframework.data.repository.core.support.RepositoryFragmentsContributor;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
/**
@ -196,6 +197,19 @@ class AnnotationRepositoryConfigurationSourceUnitTests { @@ -196,6 +197,19 @@ class AnnotationRepositoryConfigurationSourceUnitTests {
.contains(SampleRepositoryFragmentsContributor.class.getName());
}
@Test // GH-3279
void skipsInterfaceFragmentsContributor() {
RootBeanDefinition bd = new RootBeanDefinition(DummyRepositoryFactory.class);
bd.getConstructorArgumentValues().addGenericArgumentValue(PersonRepository.class);
AnnotationMetadata metadata = AnnotationMetadata.introspect(ConfigurationWithFragmentsContributorInterface.class);
AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(metadata,
EnableRepositoriesWithContributor.class, resourceLoader, environment, registry, null);
assertThat(configurationSource.getRepositoryFragmentsContributorClassName()).isEmpty();
}
@Test // GH-3279
void omitsUnspecifiedFragmentsContributor() {
@ -216,8 +230,9 @@ class AnnotationRepositoryConfigurationSourceUnitTests { @@ -216,8 +230,9 @@ class AnnotationRepositoryConfigurationSourceUnitTests {
bd.getConstructorArgumentValues().addGenericArgumentValue(ReactivePersonRepository.class);
assertThat(getConfigSource(ConfigurationWithBeanNameGenerator.class).generateBeanName(bd))
.isEqualTo(ReactivePersonRepository.class.getName());
assertThat(getConfigSource(DefaultConfiguration.class).generateBeanName(bd)).isEqualTo("annotationRepositoryConfigurationSourceUnitTests.ReactivePersonRepository");
.isEqualTo(ReactivePersonRepository.class.getName());
assertThat(getConfigSource(DefaultConfiguration.class).generateBeanName(bd))
.isEqualTo("annotationRepositoryConfigurationSourceUnitTests.ReactivePersonRepository");
}
private AnnotationRepositoryConfigurationSource getConfigSource(Class<?> type) {
@ -247,6 +262,9 @@ class AnnotationRepositoryConfigurationSourceUnitTests { @@ -247,6 +262,9 @@ class AnnotationRepositoryConfigurationSourceUnitTests {
@EnableRepositoriesWithContributor()
static class ConfigurationWithFragmentsContributor {}
@EnableRepositoriesWithContributor(fragmentsContributor = RepositoryFragmentsContributor.class)
static class ConfigurationWithFragmentsContributorInterface {}
@EnableReactiveRepositories(nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class)
static class ReactiveConfigurationWithBeanNameGenerator {}
@ -256,6 +274,7 @@ class AnnotationRepositoryConfigurationSourceUnitTests { @@ -256,6 +274,7 @@ class AnnotationRepositoryConfigurationSourceUnitTests {
Filter[] includeFilters() default {};
Filter[] excludeFilters() default {};
}
@SampleAnnotation

Loading…
Cancel
Save