Final merged bean definition clearing in freezeConfiguration
Instead of individual last-minute clearing in markBeanAsCreated, the factory clears all merged bean definitions in freezeConfiguration, retaining the changes of merged bean definition post-processing after that point (in particular in refreshForAotProcessing). Closes gh-28948
This commit is contained in:
@@ -423,6 +423,7 @@ final class PostProcessorRegistrationDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static final class MergedBeanDefinitionPostProcessorInvoker {
|
||||
|
||||
private final DefaultListableBeanFactory beanFactory;
|
||||
@@ -438,12 +439,14 @@ final class PostProcessorRegistrationDelegate {
|
||||
RootBeanDefinition bd = (RootBeanDefinition) this.beanFactory.getMergedBeanDefinition(beanName);
|
||||
Class<?> beanType = resolveBeanType(bd);
|
||||
postProcessRootBeanDefinition(postProcessors, beanName, beanType, bd);
|
||||
bd.markAsPostProcessed();
|
||||
}
|
||||
registerBeanPostProcessors(this.beanFactory, postProcessors);
|
||||
}
|
||||
|
||||
private void postProcessRootBeanDefinition(List<MergedBeanDefinitionPostProcessor> postProcessors,
|
||||
String beanName, Class<?> beanType, RootBeanDefinition bd) {
|
||||
|
||||
BeanDefinitionValueResolver valueResolver = new BeanDefinitionValueResolver(this.beanFactory, beanName, bd);
|
||||
postProcessors.forEach(postProcessor -> postProcessor.postProcessMergedBeanDefinition(bd, beanType, beanName));
|
||||
for (PropertyValue propertyValue : bd.getPropertyValues().getPropertyValueList()) {
|
||||
@@ -466,6 +469,7 @@ final class PostProcessorRegistrationDelegate {
|
||||
|
||||
private void resolveInnerBeanDefinition(BeanDefinitionValueResolver valueResolver, BeanDefinition innerBeanDefinition,
|
||||
BiConsumer<String, RootBeanDefinition> resolver) {
|
||||
|
||||
valueResolver.resolveInnerBean(null, innerBeanDefinition, (name, rbd) -> {
|
||||
resolver.accept(name, rbd);
|
||||
return Void.class;
|
||||
|
||||
Reference in New Issue
Block a user