Do not write BeanDefinition attributes by default
This commit flips the default strategy for BeanDefinition attributes so that they are not generated in AOT-optimized contexts. Closes gh-28516
This commit is contained in:
parent
b38a5df563
commit
f0f7f72de9
|
|
@ -37,7 +37,7 @@ import org.springframework.util.Assert;
|
||||||
*/
|
*/
|
||||||
class BeanRegistrationCodeGenerator implements BeanRegistrationCode {
|
class BeanRegistrationCodeGenerator implements BeanRegistrationCode {
|
||||||
|
|
||||||
private static final Predicate<String> NO_ATTRIBUTE_FILTER = attribute -> true;
|
private static final Predicate<String> REJECT_ALL_ATTRIBUTES_FILTER = attribute -> false;
|
||||||
|
|
||||||
private final ClassName className;
|
private final ClassName className;
|
||||||
|
|
||||||
|
|
@ -85,7 +85,7 @@ class BeanRegistrationCodeGenerator implements BeanRegistrationCode {
|
||||||
this.registeredBean.getBeanType(), this));
|
this.registeredBean.getBeanType(), this));
|
||||||
builder.add(this.codeFragments.generateSetBeanDefinitionPropertiesCode(
|
builder.add(this.codeFragments.generateSetBeanDefinitionPropertiesCode(
|
||||||
generationContext, this, this.registeredBean.getMergedBeanDefinition(),
|
generationContext, this, this.registeredBean.getMergedBeanDefinition(),
|
||||||
NO_ATTRIBUTE_FILTER));
|
REJECT_ALL_ATTRIBUTES_FILTER));
|
||||||
CodeBlock instanceSupplierCode = this.codeFragments.generateInstanceSupplierCode(
|
CodeBlock instanceSupplierCode = this.codeFragments.generateInstanceSupplierCode(
|
||||||
generationContext, this, this.constructorOrFactoryMethod,
|
generationContext, this, this.constructorOrFactoryMethod,
|
||||||
this.instancePostProcessors.isEmpty());
|
this.instancePostProcessors.isEmpty());
|
||||||
|
|
|
||||||
|
|
@ -228,6 +228,23 @@ class BeanDefinitionMethodGeneratorTests {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void generateBeanDefinitionMethodDoesNotGenerateAttributesByDefault() {
|
||||||
|
RootBeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);
|
||||||
|
beanDefinition.setAttribute("a", "A");
|
||||||
|
beanDefinition.setAttribute("b", "B");
|
||||||
|
RegisteredBean registeredBean = registerBean(beanDefinition);
|
||||||
|
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
|
||||||
|
this.methodGeneratorFactory, registeredBean, null,
|
||||||
|
Collections.emptyList());
|
||||||
|
MethodReference method = generator.generateBeanDefinitionMethod(
|
||||||
|
this.generationContext, this.beanRegistrationsCode);
|
||||||
|
compile(method, (actual, compiled) -> {
|
||||||
|
assertThat(actual.hasAttribute("a")).isFalse();
|
||||||
|
assertThat(actual.hasAttribute("b")).isFalse();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void generateBeanDefinitionMethodWhenHasAttributeFilterGeneratesMethod() {
|
void generateBeanDefinitionMethodWhenHasAttributeFilterGeneratesMethod() {
|
||||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);
|
RootBeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue