Filter single inferred init/destroy methods
Update `BeanDefinitionPropertiesCodeGenerator` to not add init/destroy method calls for a single inferred name. Closes gh-28570
This commit is contained in:
parent
172102d225
commit
9a9c3ea00e
|
|
@ -151,9 +151,11 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||||
addInitDestroyHint(beanType, methodName);
|
addInitDestroyHint(beanType, methodName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!arguments.isEmpty()) {
|
||||||
builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments.build());
|
builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void addInitDestroyHint(Class<?> beanUserClass, String methodName) {
|
private void addInitDestroyHint(Class<?> beanUserClass, String methodName) {
|
||||||
Method method = ReflectionUtils.findMethod(beanUserClass, methodName);
|
Method method = ReflectionUtils.findMethod(beanUserClass, methodName);
|
||||||
|
|
|
||||||
|
|
@ -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.ConstructorArgumentValues.ValueHolder;
|
||||||
import org.springframework.beans.factory.config.RuntimeBeanNameReference;
|
import org.springframework.beans.factory.config.RuntimeBeanNameReference;
|
||||||
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
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.DefaultListableBeanFactory;
|
||||||
import org.springframework.beans.factory.support.ManagedList;
|
import org.springframework.beans.factory.support.ManagedList;
|
||||||
import org.springframework.beans.factory.support.ManagedMap;
|
import org.springframework.beans.factory.support.ManagedMap;
|
||||||
|
|
@ -229,6 +230,13 @@ class BeanDefinitionPropertiesCodeGeneratorTests {
|
||||||
assertHasMethodInvokeHints(InitDestroyBean.class, methodNames);
|
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
|
@Test
|
||||||
void setInitMethodWhenMultipleInitMethods() {
|
void setInitMethodWhenMultipleInitMethods() {
|
||||||
this.beanDefinition.setTargetType(InitDestroyBean.class);
|
this.beanDefinition.setTargetType(InitDestroyBean.class);
|
||||||
|
|
@ -250,6 +258,13 @@ class BeanDefinitionPropertiesCodeGeneratorTests {
|
||||||
assertHasMethodInvokeHints(InitDestroyBean.class, methodNames);
|
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
|
@Test
|
||||||
void setDestroyMethodWhenMultipleDestroyMethods() {
|
void setDestroyMethodWhenMultipleDestroyMethods() {
|
||||||
this.beanDefinition.setTargetType(InitDestroyBean.class);
|
this.beanDefinition.setTargetType(InitDestroyBean.class);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue