From 9a9c3ea00e2a955c06452d1e28d092594cca53a8 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sun, 5 Jun 2022 16:13:11 -0700 Subject: [PATCH] Filter single inferred init/destroy methods Update `BeanDefinitionPropertiesCodeGenerator` to not add init/destroy method calls for a single inferred name. Closes gh-28570 --- .../BeanDefinitionPropertiesCodeGenerator.java | 4 +++- ...eanDefinitionPropertiesCodeGeneratorTests.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGenerator.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGenerator.java index 4b1bc3a1aa..ac25b4af6e 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGenerator.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGenerator.java @@ -151,7 +151,9 @@ class BeanDefinitionPropertiesCodeGenerator { addInitDestroyHint(beanType, methodName); } } - builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments.build()); + if (!arguments.isEmpty()) { + builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments.build()); + } } } diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGeneratorTests.java index 6966bd362d..e1ff8ecc3a 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGeneratorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGeneratorTests.java @@ -37,6 +37,7 @@ import org.springframework.beans.factory.config.BeanReference; import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder; import org.springframework.beans.factory.config.RuntimeBeanNameReference; import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.support.ManagedMap; @@ -229,6 +230,13 @@ class BeanDefinitionPropertiesCodeGeneratorTests { assertHasMethodInvokeHints(InitDestroyBean.class, methodNames); } + @Test + void setInitMethodWhenSingleInferredInitMethod() { + this.beanDefinition.setTargetType(InitDestroyBean.class); + this.beanDefinition.setInitMethodName(AbstractBeanDefinition.INFER_METHOD); + testCompiledResult((actual, compiled) -> assertThat(actual.getInitMethodNames()).isNull()); + } + @Test void setInitMethodWhenMultipleInitMethods() { this.beanDefinition.setTargetType(InitDestroyBean.class); @@ -250,6 +258,13 @@ class BeanDefinitionPropertiesCodeGeneratorTests { assertHasMethodInvokeHints(InitDestroyBean.class, methodNames); } + @Test + void setDestroyMethodWhenSingleInferredInitMethod() { + this.beanDefinition.setTargetType(InitDestroyBean.class); + this.beanDefinition.setDestroyMethodName(AbstractBeanDefinition.INFER_METHOD); + testCompiledResult((actual, compiled) -> assertThat(actual.getDestroyMethodNames()).isNull()); + } + @Test void setDestroyMethodWhenMultipleDestroyMethods() { this.beanDefinition.setTargetType(InitDestroyBean.class);