mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Merge branch '2.7.x' into 3.0.x
Closes gh-37923
This commit is contained in:
commit
ece239f421
@ -23,6 +23,7 @@ import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
@ -36,6 +37,7 @@ import org.springframework.boot.context.annotation.DeterminableImports;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||
@ -237,7 +239,18 @@ class ImportsContextCustomizer implements ContextCustomizer {
|
||||
Set<Class<?>> seen = new HashSet<>();
|
||||
collectClassAnnotations(testClass, annotations, seen);
|
||||
Set<Object> determinedImports = determineImports(annotations, testClass);
|
||||
this.key = Collections.unmodifiableSet((determinedImports != null) ? determinedImports : annotations);
|
||||
if (determinedImports == null) {
|
||||
this.key = Collections.unmodifiableSet(annotations);
|
||||
}
|
||||
else {
|
||||
Set<Object> key = new HashSet<>();
|
||||
key.addAll(determinedImports);
|
||||
Set<Annotation> componentScanning = annotations.stream()
|
||||
.filter(ComponentScan.class::isInstance)
|
||||
.collect(Collectors.toSet());
|
||||
key.addAll(componentScanning);
|
||||
this.key = Collections.unmodifiableSet(key);
|
||||
}
|
||||
}
|
||||
|
||||
private void collectClassAnnotations(Class<?> classType, Set<Annotation> annotations, Set<Class<?>> seen) {
|
||||
|
@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -74,6 +75,20 @@ class ImportsContextCustomizerFactoryTests {
|
||||
assertThat(customizer3).isEqualTo(customizer4);
|
||||
}
|
||||
|
||||
@Test
|
||||
void contextCustomizerEqualsAndHashCodeConsidersComponentScan() {
|
||||
ContextCustomizer customizer1 = this.factory
|
||||
.createContextCustomizer(TestWithImportAndComponentScanOfSomePackage.class, null);
|
||||
ContextCustomizer customizer2 = this.factory
|
||||
.createContextCustomizer(TestWithImportAndComponentScanOfSomePackage.class, null);
|
||||
ContextCustomizer customizer3 = this.factory
|
||||
.createContextCustomizer(TestWithImportAndComponentScanOfAnotherPackage.class, null);
|
||||
assertThat(customizer1.hashCode()).isEqualTo(customizer2.hashCode());
|
||||
assertThat(customizer1).isEqualTo(customizer2);
|
||||
assertThat(customizer3.hashCode()).isNotEqualTo(customizer2.hashCode()).isNotEqualTo(customizer1.hashCode());
|
||||
assertThat(customizer3).isNotEqualTo(customizer2).isNotEqualTo(customizer1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getContextCustomizerWhenClassHasBeanMethodsShouldThrowException() {
|
||||
assertThatIllegalStateException()
|
||||
@ -105,6 +120,18 @@ class ImportsContextCustomizerFactoryTests {
|
||||
|
||||
}
|
||||
|
||||
@Import(ImportedBean.class)
|
||||
@ComponentScan("some.package")
|
||||
static class TestWithImportAndComponentScanOfSomePackage {
|
||||
|
||||
}
|
||||
|
||||
@Import(ImportedBean.class)
|
||||
@ComponentScan("another.package")
|
||||
static class TestWithImportAndComponentScanOfAnotherPackage {
|
||||
|
||||
}
|
||||
|
||||
@MetaImport
|
||||
static class TestWithMetaImport {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user