• Andy Wilkinson's avatar
    Allow HttpMsgConverter to depend on ConvService without creating a cycle · e5906a6b
    Andy Wilkinson authored
    In an MVC web application, DelegatingWebMvcConfiguration provides the
    ConversionService while also consuming WebMvcConfigurerAdapters that,
    among other things, can configure HTTP message converters. Boot's
    WebMvcConfigurerAdapter, WebMvcAutoConfigurationAdapter, consumes
    the HttpMessageConverters bean and uses it to configure Spring MVC's
    HTTP message converters. This can create a bean dependency cycle if
    an HTTP message converter bean depends, directly or indirectly on
    the ConversionService. An example of the cycle is:
    
    ┌─────┐
    |  jsonComponentConversionServiceCycle.ThingDeserializer defined in …
    ↑     ↓
    |  org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration
    ↑     ↓
    |  org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter
    ↑     ↓
    |  org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration
    ↑     ↓
    |  mappingJackson2HttpMessageConverter defined in class path resource [org/springframework/boot/autoconfigure/web/JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration.class]
    ↑     ↓
    |  jacksonObjectMapper defined in class path resource [org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$JacksonObjectMapperConfiguration.class]
    └─────┘
    
    This commit breaks the cycle by making WebMvcAutoConfigurationAdapter
    consume HttpMessageConverters lazily. This allows the adapter to be
    created without triggered instantiation of every HTTP message
    converter bean and all their dependencies. This allows it to be
    injected into DelegatingWebMvcConfiguration without triggering an
    attempt to retrieve the ConversionService.
    
    Closes gh-9409
    e5906a6b
Name
Last commit
Last update
..
admin Loading commit data...
amqp Loading commit data...
aop Loading commit data...
batch Loading commit data...
cache Loading commit data...
cassandra Loading commit data...
cloud Loading commit data...
condition Loading commit data...
context Loading commit data...
couchbase Loading commit data...
dao Loading commit data...
data Loading commit data...
diagnostics/analyzer Loading commit data...
domain Loading commit data...
elasticsearch/jest Loading commit data...
flyway Loading commit data...
freemarker Loading commit data...
groovy/template Loading commit data...
gson Loading commit data...
h2 Loading commit data...
hateoas Loading commit data...
hazelcast Loading commit data...
info Loading commit data...
integration Loading commit data...
jackson Loading commit data...
jdbc Loading commit data...
jersey Loading commit data...
jms Loading commit data...
jmx Loading commit data...
jooq Loading commit data...
kafka Loading commit data...
ldap Loading commit data...
liquibase Loading commit data...
logging Loading commit data...
mail Loading commit data...
mobile Loading commit data...
mongo Loading commit data...
mustache Loading commit data...
orm/jpa Loading commit data...
reactor Loading commit data...
security Loading commit data...
sendgrid Loading commit data...
session Loading commit data...
social Loading commit data...
solr Loading commit data...
template Loading commit data...
thymeleaf Loading commit data...
transaction Loading commit data...
validation Loading commit data...
web Loading commit data...
webservices Loading commit data...
websocket Loading commit data...
AbstractDatabaseInitializer.java Loading commit data...
AbstractDependsOnBeanFactoryPostProcessor.java Loading commit data...
AutoConfigurationExcludeFilter.java Loading commit data...
AutoConfigurationImportEvent.java Loading commit data...
AutoConfigurationImportFilter.java Loading commit data...
AutoConfigurationImportListener.java Loading commit data...
AutoConfigurationImportSelector.java Loading commit data...
AutoConfigurationMetadata.java Loading commit data...
AutoConfigurationMetadataLoader.java Loading commit data...
AutoConfigurationPackage.java Loading commit data...
AutoConfigurationPackages.java Loading commit data...
AutoConfigurationSorter.java Loading commit data...
AutoConfigureAfter.java Loading commit data...
AutoConfigureBefore.java Loading commit data...
AutoConfigureOrder.java Loading commit data...
BackgroundPreinitializer.java Loading commit data...
EnableAutoConfiguration.java Loading commit data...
EnableAutoConfigurationImportSelector.java Loading commit data...
ImportAutoConfiguration.java Loading commit data...
ImportAutoConfigurationImportSelector.java Loading commit data...
MessageSourceAutoConfiguration.java Loading commit data...
PropertyPlaceholderAutoConfiguration.java Loading commit data...
SharedMetadataReaderFactoryContextInitializer.java Loading commit data...
SpringBootApplication.java Loading commit data...
package-info.java Loading commit data...