From f0f7f72de931124e7f6ff250b9699a439730922b Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 27 Jul 2022 14:59:06 +0200 Subject: [PATCH] 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 --- .../aot/BeanRegistrationCodeGenerator.java | 4 ++-- .../aot/BeanDefinitionMethodGeneratorTests.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationCodeGenerator.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationCodeGenerator.java index 3a866afebe5..7de3f8e1e47 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationCodeGenerator.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationCodeGenerator.java @@ -37,7 +37,7 @@ import org.springframework.util.Assert; */ class BeanRegistrationCodeGenerator implements BeanRegistrationCode { - private static final Predicate NO_ATTRIBUTE_FILTER = attribute -> true; + private static final Predicate REJECT_ALL_ATTRIBUTES_FILTER = attribute -> false; private final ClassName className; @@ -85,7 +85,7 @@ class BeanRegistrationCodeGenerator implements BeanRegistrationCode { this.registeredBean.getBeanType(), this)); builder.add(this.codeFragments.generateSetBeanDefinitionPropertiesCode( generationContext, this, this.registeredBean.getMergedBeanDefinition(), - NO_ATTRIBUTE_FILTER)); + REJECT_ALL_ATTRIBUTES_FILTER)); CodeBlock instanceSupplierCode = this.codeFragments.generateInstanceSupplierCode( generationContext, this, this.constructorOrFactoryMethod, this.instancePostProcessors.isEmpty()); diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java index 463767ead9b..2db44036c36 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java @@ -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 void generateBeanDefinitionMethodWhenHasAttributeFilterGeneratesMethod() { RootBeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class);