From 9f74a64c180783181f8a04603b04d3e692a6fa68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Wed, 25 Oct 2023 12:15:55 +0200 Subject: [PATCH] Do not instantiate property value while parsing MVC element This commit harmonizes AnnotationDrivenBeanDefinitionParser so that it does not instantiate a property value while parsing the element. Rather, it creates an inner bean definition so that the property is created during the refresh phase. Closes gh-31472 --- .../config/AnnotationDrivenBeanDefinitionParser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index 34aefb1d4d..b48e06b262 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -602,7 +602,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { Class type = MappingJackson2SmileHttpMessageConverter.class; RootBeanDefinition jacksonConverterDef = createConverterDefinition(type, source); GenericBeanDefinition jacksonFactoryDef = createObjectMapperFactoryDefinition(source); - jacksonFactoryDef.getPropertyValues().add("factory", new SmileFactory()); + jacksonFactoryDef.getPropertyValues().add("factory", new RootBeanDefinition(SmileFactory.class)); jacksonConverterDef.getConstructorArgumentValues().addIndexedArgumentValue(0, jacksonFactoryDef); messageConverters.add(jacksonConverterDef); } @@ -610,7 +610,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { Class type = MappingJackson2CborHttpMessageConverter.class; RootBeanDefinition jacksonConverterDef = createConverterDefinition(type, source); GenericBeanDefinition jacksonFactoryDef = createObjectMapperFactoryDefinition(source); - jacksonFactoryDef.getPropertyValues().add("factory", new CBORFactory()); + jacksonFactoryDef.getPropertyValues().add("factory", new RootBeanDefinition(CBORFactory.class)); jacksonConverterDef.getConstructorArgumentValues().addIndexedArgumentValue(0, jacksonFactoryDef); messageConverters.add(jacksonConverterDef); }