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.HashSet;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.beans.BeansException;
|
import org.springframework.beans.BeansException;
|
||||||
import org.springframework.beans.factory.BeanFactory;
|
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.ApplicationContext;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
|
import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||||
@ -237,7 +239,18 @@ class ImportsContextCustomizer implements ContextCustomizer {
|
|||||||
Set<Class<?>> seen = new HashSet<>();
|
Set<Class<?>> seen = new HashSet<>();
|
||||||
collectClassAnnotations(testClass, annotations, seen);
|
collectClassAnnotations(testClass, annotations, seen);
|
||||||
Set<Object> determinedImports = determineImports(annotations, testClass);
|
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) {
|
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.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -74,6 +75,20 @@ class ImportsContextCustomizerFactoryTests {
|
|||||||
assertThat(customizer3).isEqualTo(customizer4);
|
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
|
@Test
|
||||||
void getContextCustomizerWhenClassHasBeanMethodsShouldThrowException() {
|
void getContextCustomizerWhenClassHasBeanMethodsShouldThrowException() {
|
||||||
assertThatIllegalStateException()
|
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
|
@MetaImport
|
||||||
static class TestWithMetaImport {
|
static class TestWithMetaImport {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user