Make sure inferred destroy method is set on the original bean definition
This commit updates InitDestroyAnnotationBeanPostProcessor to mutate the original bean definition rather than the merged one that can be recreated without it if the cache gets stale. See gh-28215
This commit is contained in:
@@ -90,6 +90,19 @@ class InitDestroyAnnotationBeanPostProcessorTests {
|
||||
assertThat(mergedBeanDefinition.getDestroyMethodNames()).containsExactly("close");
|
||||
}
|
||||
|
||||
@Test
|
||||
void processAheadOfTimeWhenHasInferredDestroyMethodIsRetainedIfMergedBeanDefinitionIsStale() {
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(InferredDestroyBean.class);
|
||||
beanDefinition.setDestroyMethodNames(AbstractBeanDefinition.INFER_METHOD);
|
||||
processAheadOfTime(beanDefinition);
|
||||
RootBeanDefinition mergedBeanDefinition = getMergedBeanDefinition();
|
||||
assertThat(mergedBeanDefinition.getInitMethodNames()).isNull();
|
||||
assertThat(mergedBeanDefinition.getDestroyMethodNames()).containsExactly("close");
|
||||
RootBeanDefinition originalBeanDefinition = (RootBeanDefinition) this.beanFactory.getBeanDefinition("test");
|
||||
assertThat(originalBeanDefinition.getInitMethodNames()).isNull();
|
||||
assertThat(originalBeanDefinition.getDestroyMethodNames()).containsExactly("close");
|
||||
}
|
||||
|
||||
@Test
|
||||
void processAheadOfTimeWhenHasInferredDestroyMethodAndNoCandidateDoesNotMutateRootBeanDefinition() {
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(NoInitDestroyBean.class);
|
||||
|
||||
Reference in New Issue
Block a user