Always accept existing explicit definition for same class name
See gh-25952
This commit is contained in:
@@ -33,6 +33,7 @@ import org.springframework.core.env.StandardEnvironment;
|
|||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.util.PatternMatchUtils;
|
import org.springframework.util.PatternMatchUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -345,7 +346,8 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo
|
|||||||
|
|
||||||
// Explicitly registered overriding bean?
|
// Explicitly registered overriding bean?
|
||||||
if (!(existingDef instanceof ScannedGenericBeanDefinition) &&
|
if (!(existingDef instanceof ScannedGenericBeanDefinition) &&
|
||||||
this.registry.isBeanDefinitionOverridable(beanName)) {
|
(this.registry.isBeanDefinitionOverridable(beanName) || ObjectUtils.nullSafeEquals(
|
||||||
|
beanDefinition.getBeanClassName(), existingDef.getBeanClassName()))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -215,6 +215,18 @@ public class ClassPathBeanDefinitionScannerTests {
|
|||||||
.withMessageContaining(StubFooDao.class.getName());
|
.withMessageContaining(StubFooDao.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSimpleScanWithDefaultFiltersAndOverridingBeanAcceptedForSameBeanClass() {
|
||||||
|
GenericApplicationContext context = new GenericApplicationContext();
|
||||||
|
context.getDefaultListableBeanFactory().setAllowBeanDefinitionOverriding(false);
|
||||||
|
context.registerBeanDefinition("stubFooDao", new RootBeanDefinition(StubFooDao.class));
|
||||||
|
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(context);
|
||||||
|
scanner.setIncludeAnnotationConfig(false);
|
||||||
|
|
||||||
|
// should not fail!
|
||||||
|
scanner.scan(BASE_PACKAGE);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSimpleScanWithDefaultFiltersAndDefaultBeanNameClash() {
|
public void testSimpleScanWithDefaultFiltersAndDefaultBeanNameClash() {
|
||||||
GenericApplicationContext context = new GenericApplicationContext();
|
GenericApplicationContext context = new GenericApplicationContext();
|
||||||
|
|||||||
Reference in New Issue
Block a user