Skip to content

Commit 68e28a5

Browse files
OlgaMaciaszeksnicoll
authored andcommitted
Handle inferred init/destroy method consistently
See gh-28843
1 parent d6345db commit 68e28a5

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGenerator.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.beans.Introspector;
2222
import java.beans.PropertyDescriptor;
2323
import java.lang.reflect.Method;
24+
import java.util.Arrays;
2425
import java.util.Collections;
2526
import java.util.HashMap;
2627
import java.util.Map;
@@ -73,6 +74,7 @@
7374
*
7475
* @author Phillip Webb
7576
* @author Stephane Nicoll
77+
* @author Olga Maciaszek-Sharma
7678
* @since 6.0
7779
*/
7880
class BeanDefinitionPropertiesCodeGenerator {
@@ -143,12 +145,13 @@ private void addInitDestroyMethods(Builder builder,
143145
Class<?> beanType = ClassUtils
144146
.getUserClass(beanDefinition.getResolvableType().toClass());
145147
Builder arguments = CodeBlock.builder();
146-
for (int i = 0; i < methodNames.length; i++) {
147-
String methodName = methodNames[i];
148-
if (!AbstractBeanDefinition.INFER_METHOD.equals(methodName)) {
149-
arguments.add((i != 0) ? ", $S" : "$S", methodName);
150-
addInitDestroyHint(beanType, methodName);
151-
}
148+
String[] filteredMethodNames = Arrays.stream(methodNames)
149+
.filter(methodName -> !AbstractBeanDefinition.INFER_METHOD.equals(methodName))
150+
.toArray(String[]::new);
151+
for (int i = 0; i < filteredMethodNames.length; i++) {
152+
String methodName = filteredMethodNames[i];
153+
arguments.add((i != 0) ? ", $S" : "$S", methodName);
154+
addInitDestroyHint(beanType, methodName);
152155
}
153156
if (!arguments.isEmpty()) {
154157
builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments.build());

spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGeneratorTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
*
5858
* @author Phillip Webb
5959
* @author Stephane Nicoll
60+
* @author Olga Maciaszek-Sharma
6061
*/
6162
class BeanDefinitionPropertiesCodeGeneratorTests {
6263

@@ -394,6 +395,18 @@ void multipleItems() {
394395
});
395396
}
396397

398+
@Test
399+
void inferredMethodsAtTheBeginning() {
400+
this.beanDefinition.setInitMethodNames(AbstractBeanDefinition.INFER_METHOD, "init");
401+
this.beanDefinition.setDestroyMethodNames(AbstractBeanDefinition.INFER_METHOD, "destroy");
402+
compile((actual, compiled) -> {
403+
assertThat(compiled.getSourceFile().getContent())
404+
.contains("beanDefinition.setInitMethodNames(\"init\");");
405+
assertThat(compiled.getSourceFile().getContent())
406+
.contains("beanDefinition.setDestroyMethodNames(\"destroy\");");
407+
});
408+
}
409+
397410
private void compile(BiConsumer<RootBeanDefinition, Compiled> result) {
398411
compile(attribute -> true, result);
399412
}

0 commit comments

Comments
 (0)