diff --git a/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java index a9377f57006..0cddc626928 100644 --- a/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java @@ -406,6 +406,7 @@ public class GenericApplicationContext extends AbstractApplicationContext implem prepareBeanFactory(this.beanFactory); postProcessBeanFactory(this.beanFactory); invokeBeanFactoryPostProcessors(this.beanFactory); + this.beanFactory.freezeConfiguration(); PostProcessorRegistrationDelegate.invokeMergedBeanDefinitionPostProcessors(this.beanFactory); } diff --git a/spring-context/src/test/java/org/springframework/context/support/GenericApplicationContextTests.java b/spring-context/src/test/java/org/springframework/context/support/GenericApplicationContextTests.java index d44cf7172b6..aa85cefe459 100644 --- a/spring-context/src/test/java/org/springframework/context/support/GenericApplicationContextTests.java +++ b/spring-context/src/test/java/org/springframework/context/support/GenericApplicationContextTests.java @@ -409,6 +409,19 @@ class GenericApplicationContextTests { context.close(); } + @Test + void refreshForAotFreezeConfiguration() { + GenericApplicationContext context = new GenericApplicationContext(); + context.registerBeanDefinition("test", new RootBeanDefinition(String.class)); + MergedBeanDefinitionPostProcessor bpp = registerMockMergedBeanDefinitionPostProcessor(context); + context.refreshForAotProcessing(); + RootBeanDefinition mergedBeanDefinition = getBeanDefinition(context, "test"); + verify(bpp).postProcessMergedBeanDefinition(mergedBeanDefinition, String.class, "test"); + context.getBeanFactory().clearMetadataCache(); + assertThat(context.getBeanFactory().getMergedBeanDefinition("test")).isSameAs(mergedBeanDefinition); + context.close(); + } + @Test void refreshForAotInvokesBeanPostProcessorContractOnMergedBeanDefinitionPostProcessors() { MergedBeanDefinitionPostProcessor bpp = new MergedBeanDefinitionPostProcessor() {