Use RootBeanDefinition consistently

Closes gh-28077
This commit is contained in:
Stephane Nicoll 2021-09-21 16:36:45 +02:00
parent ae00228188
commit e0465f7357
6 changed files with 25 additions and 33 deletions

View File

@ -449,7 +449,7 @@ class ConditionalOnMissingBeanTests {
@Override @Override
public void registerBeanDefinitions(AnnotationMetadata meta, BeanDefinitionRegistry registry) { public void registerBeanDefinitions(AnnotationMetadata meta, BeanDefinitionRegistry registry) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(NonspecificFactoryBean.class); BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(NonspecificFactoryBean.class);
builder.addConstructorArgValue("foo"); builder.addConstructorArgValue("foo");
builder.getBeanDefinition().setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, ExampleBean.class); builder.getBeanDefinition().setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, ExampleBean.class);
registry.registerBeanDefinition("exampleBeanFactoryBean", builder.getBeanDefinition()); registry.registerBeanDefinition("exampleBeanFactoryBean", builder.getBeanDefinition());
@ -467,7 +467,7 @@ class ConditionalOnMissingBeanTests {
@Override @Override
public void registerBeanDefinitions(AnnotationMetadata meta, BeanDefinitionRegistry registry) { public void registerBeanDefinitions(AnnotationMetadata meta, BeanDefinitionRegistry registry) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(NonspecificFactoryBean.class); BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(NonspecificFactoryBean.class);
builder.addConstructorArgValue("foo"); builder.addConstructorArgValue("foo");
builder.getBeanDefinition().setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, ExampleBean.class.getName()); builder.getBeanDefinition().setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, ExampleBean.class.getName());
registry.registerBeanDefinition("exampleBeanFactoryBean", builder.getBeanDefinition()); registry.registerBeanDefinition("exampleBeanFactoryBean", builder.getBeanDefinition());
@ -485,7 +485,7 @@ class ConditionalOnMissingBeanTests {
@Override @Override
public void registerBeanDefinitions(AnnotationMetadata meta, BeanDefinitionRegistry registry) { public void registerBeanDefinitions(AnnotationMetadata meta, BeanDefinitionRegistry registry) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ExampleFactoryBean.class); BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ExampleFactoryBean.class);
builder.addConstructorArgValue("foo"); builder.addConstructorArgValue("foo");
registry.registerBeanDefinition("exampleBeanFactoryBean", builder.getBeanDefinition()); registry.registerBeanDefinition("exampleBeanFactoryBean", builder.getBeanDefinition());
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -86,8 +86,8 @@ class PropertyPlaceholderAutoConfigurationTests {
private void definePlaceholderBean(ConfigurableApplicationContext context) { private void definePlaceholderBean(ConfigurableApplicationContext context) {
((BeanDefinitionRegistry) context.getBeanFactory()).registerBeanDefinition("placeholderBean", ((BeanDefinitionRegistry) context.getBeanFactory()).registerBeanDefinition("placeholderBean",
BeanDefinitionBuilder.genericBeanDefinition(PlaceholderBean.class) BeanDefinitionBuilder.rootBeanDefinition(PlaceholderBean.class).addConstructorArgValue("${fruit:apple}")
.addConstructorArgValue("${fruit:apple}").getBeanDefinition()); .getBeanDefinition());
} }
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)

View File

@ -26,7 +26,6 @@ import org.springframework.beans.PropertyEditorRegistry;
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.boot.context.properties.bind.AbstractBindHandler; import org.springframework.boot.context.properties.bind.AbstractBindHandler;
@ -113,7 +112,7 @@ class ConfigurationPropertiesBinder {
private <T> BindHandler getBindHandler(Bindable<T> target, ConfigurationProperties annotation) { private <T> BindHandler getBindHandler(Bindable<T> target, ConfigurationProperties annotation) {
List<Validator> validators = getValidators(target); List<Validator> validators = getValidators(target);
BindHandler handler = getHandler(); BindHandler handler = getHandler();
handler = new ConfigurationPropertiesBindHander(handler); handler = new ConfigurationPropertiesBindHandler(handler);
if (annotation.ignoreInvalidFields()) { if (annotation.ignoreInvalidFields()) {
handler = new IgnoreErrorsBindHandler(handler); handler = new IgnoreErrorsBindHandler(handler);
} }
@ -193,16 +192,14 @@ class ConfigurationPropertiesBinder {
static void register(BeanDefinitionRegistry registry) { static void register(BeanDefinitionRegistry registry) {
if (!registry.containsBeanDefinition(FACTORY_BEAN_NAME)) { if (!registry.containsBeanDefinition(FACTORY_BEAN_NAME)) {
AbstractBeanDefinition definition = BeanDefinitionBuilder BeanDefinition definition = BeanDefinitionBuilder
.genericBeanDefinition(ConfigurationPropertiesBinder.Factory.class, .rootBeanDefinition(ConfigurationPropertiesBinder.Factory.class).getBeanDefinition();
ConfigurationPropertiesBinder.Factory::new)
.getBeanDefinition();
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
registry.registerBeanDefinition(ConfigurationPropertiesBinder.FACTORY_BEAN_NAME, definition); registry.registerBeanDefinition(ConfigurationPropertiesBinder.FACTORY_BEAN_NAME, definition);
} }
if (!registry.containsBeanDefinition(BEAN_NAME)) { if (!registry.containsBeanDefinition(BEAN_NAME)) {
AbstractBeanDefinition definition = BeanDefinitionBuilder BeanDefinition definition = BeanDefinitionBuilder
.genericBeanDefinition(ConfigurationPropertiesBinder.class, .rootBeanDefinition(ConfigurationPropertiesBinder.class,
() -> ((BeanFactory) registry) () -> ((BeanFactory) registry)
.getBean(FACTORY_BEAN_NAME, ConfigurationPropertiesBinder.Factory.class).create()) .getBean(FACTORY_BEAN_NAME, ConfigurationPropertiesBinder.Factory.class).create())
.getBeanDefinition(); .getBeanDefinition();
@ -240,9 +237,9 @@ class ConfigurationPropertiesBinder {
* {@link BindHandler} to deal with * {@link BindHandler} to deal with
* {@link ConfigurationProperties @ConfigurationProperties} concerns. * {@link ConfigurationProperties @ConfigurationProperties} concerns.
*/ */
private static class ConfigurationPropertiesBindHander extends AbstractBindHandler { private static class ConfigurationPropertiesBindHandler extends AbstractBindHandler {
ConfigurationPropertiesBindHander(BindHandler handler) { ConfigurationPropertiesBindHandler(BindHandler handler) {
super(handler); super(handler);
} }

View File

@ -108,9 +108,7 @@ public class ConfigurationPropertiesBindingPostProcessor
Assert.notNull(registry, "Registry must not be null"); Assert.notNull(registry, "Registry must not be null");
if (!registry.containsBeanDefinition(BEAN_NAME)) { if (!registry.containsBeanDefinition(BEAN_NAME)) {
BeanDefinition definition = BeanDefinitionBuilder BeanDefinition definition = BeanDefinitionBuilder
.rootBeanDefinition(ConfigurationPropertiesBindingPostProcessor.class, .rootBeanDefinition(ConfigurationPropertiesBindingPostProcessor.class).getBeanDefinition();
ConfigurationPropertiesBindingPostProcessor::new)
.getBeanDefinition();
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
registry.registerBeanDefinition(BEAN_NAME, definition); registry.registerBeanDefinition(BEAN_NAME, definition);
} }

View File

@ -73,7 +73,7 @@ public class DatabaseInitializationDependencyConfigurer implements ImportBeanDef
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
String name = DependsOnDatabaseInitializationPostProcessor.class.getName(); String name = DependsOnDatabaseInitializationPostProcessor.class.getName();
if (!registry.containsBeanDefinition(name)) { if (!registry.containsBeanDefinition(name)) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(
DependsOnDatabaseInitializationPostProcessor.class, DependsOnDatabaseInitializationPostProcessor.class,
this::createDependsOnDatabaseInitializationPostProcessor); this::createDependsOnDatabaseInitializationPostProcessor);
registry.registerBeanDefinition(name, builder.getBeanDefinition()); registry.registerBeanDefinition(name, builder.getBeanDefinition());

View File

@ -81,10 +81,8 @@ class DatabaseInitializationDependencyConfigurerTests {
void beanFactoryPostProcessorHasOrderAllowingSubsequentPostProcessorsToFineTuneDependencies() { void beanFactoryPostProcessorHasOrderAllowingSubsequentPostProcessorsToFineTuneDependencies() {
performDetection(Arrays.asList(MockDatabaseInitializerDetector.class, performDetection(Arrays.asList(MockDatabaseInitializerDetector.class,
MockedDependsOnDatabaseInitializationDetector.class), (context) -> { MockedDependsOnDatabaseInitializationDetector.class), (context) -> {
BeanDefinition alpha = BeanDefinitionBuilder.genericBeanDefinition(String.class) BeanDefinition alpha = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
.getBeanDefinition(); BeanDefinition bravo = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
BeanDefinition bravo = BeanDefinitionBuilder.genericBeanDefinition(String.class)
.getBeanDefinition();
context.register(DependsOnCaptor.class); context.register(DependsOnCaptor.class);
context.register(DependencyConfigurerConfiguration.class); context.register(DependencyConfigurerConfiguration.class);
context.registerBeanDefinition("alpha", alpha); context.registerBeanDefinition("alpha", alpha);
@ -104,8 +102,7 @@ class DatabaseInitializationDependencyConfigurerTests {
void whenDetectorsAreCreatedThenTheEnvironmentCanBeInjected() { void whenDetectorsAreCreatedThenTheEnvironmentCanBeInjected() {
performDetection(Arrays.asList(ConstructorInjectionDatabaseInitializerDetector.class, performDetection(Arrays.asList(ConstructorInjectionDatabaseInitializerDetector.class,
ConstructorInjectionDependsOnDatabaseInitializationDetector.class), (context) -> { ConstructorInjectionDependsOnDatabaseInitializationDetector.class), (context) -> {
BeanDefinition alpha = BeanDefinitionBuilder.genericBeanDefinition(String.class) BeanDefinition alpha = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
.getBeanDefinition();
context.registerBeanDefinition("alpha", alpha); context.registerBeanDefinition("alpha", alpha);
context.register(DependencyConfigurerConfiguration.class); context.register(DependencyConfigurerConfiguration.class);
context.refresh(); context.refresh();
@ -117,8 +114,8 @@ class DatabaseInitializationDependencyConfigurerTests {
@Test @Test
void whenDependenciesAreConfiguredThenBeansThatDependUponDatabaseInitializationDependUponDetectedDatabaseInitializers() { void whenDependenciesAreConfiguredThenBeansThatDependUponDatabaseInitializationDependUponDetectedDatabaseInitializers() {
BeanDefinition alpha = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition alpha = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
BeanDefinition bravo = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition bravo = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
performDetection(Arrays.asList(MockDatabaseInitializerDetector.class, performDetection(Arrays.asList(MockDatabaseInitializerDetector.class,
MockedDependsOnDatabaseInitializationDetector.class), (context) -> { MockedDependsOnDatabaseInitializationDetector.class), (context) -> {
context.registerBeanDefinition("alpha", alpha); context.registerBeanDefinition("alpha", alpha);
@ -140,11 +137,11 @@ class DatabaseInitializationDependencyConfigurerTests {
@Test @Test
void whenDependenciesAreConfiguredDetectedDatabaseInitializersAreInitializedInCorrectOrder() { void whenDependenciesAreConfiguredDetectedDatabaseInitializersAreInitializedInCorrectOrder() {
BeanDefinition alpha = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition alpha = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
BeanDefinition bravo1 = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition bravo1 = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
BeanDefinition bravo2 = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition bravo2 = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
BeanDefinition charlie = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition charlie = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
BeanDefinition delta = BeanDefinitionBuilder.genericBeanDefinition(String.class).getBeanDefinition(); BeanDefinition delta = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition();
performDetection( performDetection(
Arrays.asList(MockDatabaseInitializerDetector.class, OrderedLowestMockDatabaseInitializerDetector.class, Arrays.asList(MockDatabaseInitializerDetector.class, OrderedLowestMockDatabaseInitializerDetector.class,
OrderedNearLowestMockDatabaseInitializerDetector.class, OrderedNearLowestMockDatabaseInitializerDetector.class,