前提
- Java 21
- org.springframework.boot 3.2.2
該当のソースコード
以下のWebConfigを実装して起動すると循環参照のエラーが発生します。
java
1import com.fasterxml.jackson.databind.ObjectMapper;2import com.fasterxml.jackson.databind.SerializationFeature;3import org.springframework.beans.factory.annotation.Autowired;4import org.springframework.context.annotation.Bean;5import org.springframework.context.annotation.Configuration;6import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;7import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;8 9@Configuration10public class WebConfig implements WebMvcConfigurer {11 12 @Autowired13 private MappingJackson2HttpMessageConverter springMvcJacksonConverter;14 15 @Bean("objectMapper2")16 public ObjectMapper objectMapper2() {17 ObjectMapper objectMapperCopy = springMvcJacksonConverter.getObjectMapper().copy();18 objectMapperCopy.disable(SerializationFeature.INDENT_OUTPUT);19 return objectMapperCopy;20 }21 22}
発生している問題・エラーメッセージ
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'objectMapper2': Requested bean is currently in creation: Is there an unresolvable circular reference? at app//org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:355) at app//org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:227) at app//org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at app//org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at app//org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) at app//org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:907) at app//org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:785) ... 78 more
実現したいこと
異なる設定のObjectMapperを2つ用意したい。
2つ目のObjectMapperはSpringフレームワーク側で自動設定されたものをコピーして一部の設定だけ書き換えたい。
疑問点
MappingJackson2HttpMessageConverter
のAutowiredを削除すると正常に起動するのですが、
なぜMappingJackson2HttpMessageConverter
のAutowired と ObjectMapper
のBeanを同時に記述すると循環参照になってしまうのかよくわかっていません。
0 コメント