diff --git a/src/main/java/org/springframework/hateoas/config/EntityLinksConfiguration.java b/src/main/java/org/springframework/hateoas/config/EntityLinksConfiguration.java index 7dbb5665..78dc3489 100644 --- a/src/main/java/org/springframework/hateoas/config/EntityLinksConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/EntityLinksConfiguration.java @@ -29,7 +29,7 @@ import org.springframework.plugin.core.support.PluginRegistryFactoryBean; * @author Greg Turnquist * @author Oliver Gierke */ -@Configuration +@Configuration(proxyBeanMethods = false) class EntityLinksConfiguration { @Bean diff --git a/src/main/java/org/springframework/hateoas/config/HateoasConfiguration.java b/src/main/java/org/springframework/hateoas/config/HateoasConfiguration.java index 7c2a4f5d..f2555f61 100644 --- a/src/main/java/org/springframework/hateoas/config/HateoasConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/HateoasConfiguration.java @@ -59,7 +59,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @soundtrack Elephants Crossing - Wait (Live at Stadtfest Dresden) * @since 0.19 */ -@Configuration +@Configuration(proxyBeanMethods = false) @EnablePluginRegistries({ LinkDiscoverer.class }) public class HateoasConfiguration { diff --git a/src/main/java/org/springframework/hateoas/config/RestTemplateHateoasConfiguration.java b/src/main/java/org/springframework/hateoas/config/RestTemplateHateoasConfiguration.java index c99f35c2..d2c0585c 100644 --- a/src/main/java/org/springframework/hateoas/config/RestTemplateHateoasConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/RestTemplateHateoasConfiguration.java @@ -18,9 +18,11 @@ package org.springframework.hateoas.config; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; import org.springframework.lang.NonNull; import org.springframework.web.client.RestTemplate; @@ -30,16 +32,17 @@ import org.springframework.web.client.RestTemplate; * @author Greg Turnquist * @author Oliver Drotbohm */ -@Configuration +@Configuration(proxyBeanMethods = false) class RestTemplateHateoasConfiguration { @Bean static HypermediaRestTemplateBeanPostProcessor hypermediaRestTemplateBeanPostProcessor( - HypermediaRestTemplateConfigurer configurer) { + ObjectFactory configurer) { return new HypermediaRestTemplateBeanPostProcessor(configurer); } @Bean + @Lazy HypermediaRestTemplateConfigurer hypermediaRestTemplateConfigurer(WebConverters converters) { return new HypermediaRestTemplateConfigurer(converters); } @@ -54,7 +57,7 @@ class RestTemplateHateoasConfiguration { @RequiredArgsConstructor static class HypermediaRestTemplateBeanPostProcessor implements BeanPostProcessor { - private final HypermediaRestTemplateConfigurer configurer; + private final ObjectFactory configurer; /* * (non-Javadoc) @@ -64,11 +67,9 @@ class RestTemplateHateoasConfiguration { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (!RestTemplate.class.isInstance(bean)) { - return bean; - } - - return this.configurer.registerHypermediaTypes((RestTemplate) bean); + return !RestTemplate.class.isInstance(bean) // + ? bean + : this.configurer.getObject().registerHypermediaTypes((RestTemplate) bean); } } } diff --git a/src/main/java/org/springframework/hateoas/config/WebClientHateoasConfiguration.java b/src/main/java/org/springframework/hateoas/config/WebClientHateoasConfiguration.java index b5017073..1c30fc41 100644 --- a/src/main/java/org/springframework/hateoas/config/WebClientHateoasConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/WebClientHateoasConfiguration.java @@ -20,10 +20,12 @@ import lombok.RequiredArgsConstructor; import java.util.List; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; import org.springframework.lang.NonNull; import org.springframework.web.reactive.function.client.WebClient; @@ -33,19 +35,21 @@ import com.fasterxml.jackson.databind.ObjectMapper; * Spring WebFlux HATEOAS configuration. * * @author Greg Turnquist - * @since 1.0 TODO: Inspect ApplicationContext -> WebApplicationContext -> WebMVC + * @since 1.0 */ -@Configuration +@Configuration(proxyBeanMethods = false) class WebClientHateoasConfiguration { @Bean + @Lazy HypermediaWebClientConfigurer webClientConfigurer(ObjectProvider mapper, List hypermediaTypes) { return new HypermediaWebClientConfigurer(mapper.getIfAvailable(ObjectMapper::new), hypermediaTypes); } @Bean - static HypermediaWebClientBeanPostProcessor webClientBeanPostProcessor(HypermediaWebClientConfigurer configurer) { + static HypermediaWebClientBeanPostProcessor webClientBeanPostProcessor( + ObjectFactory configurer) { return new HypermediaWebClientBeanPostProcessor(configurer); } @@ -59,7 +63,7 @@ class WebClientHateoasConfiguration { @RequiredArgsConstructor static class HypermediaWebClientBeanPostProcessor implements BeanPostProcessor { - private final HypermediaWebClientConfigurer configurer; + private final ObjectFactory configurer; /* * (non-Javadoc) @@ -69,11 +73,9 @@ class WebClientHateoasConfiguration { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (WebClient.class.isInstance(bean)) { - return this.configurer.registerHypermediaTypes(((WebClient) bean).mutate()).build(); - } - - return bean; + return !WebClient.class.isInstance(bean) // + ? bean // + : this.configurer.getObject().registerHypermediaTypes(((WebClient) bean).mutate()).build(); } } } diff --git a/src/main/java/org/springframework/hateoas/config/WebFluxHateoasConfiguration.java b/src/main/java/org/springframework/hateoas/config/WebFluxHateoasConfiguration.java index e29ef05f..e01b474a 100644 --- a/src/main/java/org/springframework/hateoas/config/WebFluxHateoasConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/WebFluxHateoasConfiguration.java @@ -44,7 +44,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Oliver Drotbohm * @since 1.0 */ -@Configuration +@Configuration(proxyBeanMethods = false) class WebFluxHateoasConfiguration { @Bean diff --git a/src/main/java/org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.java b/src/main/java/org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.java index f10256c5..0b8f8070 100644 --- a/src/main/java/org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.java @@ -29,7 +29,7 @@ import org.springframework.stereotype.Controller; * @author Greg Turnquist * @author Oliver Gierke */ -@Configuration +@Configuration(proxyBeanMethods = false) class WebMvcEntityLinksConfiguration extends EntityLinksConfiguration { @Bean diff --git a/src/main/java/org/springframework/hateoas/config/WebMvcHateoasConfiguration.java b/src/main/java/org/springframework/hateoas/config/WebMvcHateoasConfiguration.java index be4eb341..4ad7cff9 100644 --- a/src/main/java/org/springframework/hateoas/config/WebMvcHateoasConfiguration.java +++ b/src/main/java/org/springframework/hateoas/config/WebMvcHateoasConfiguration.java @@ -44,7 +44,7 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl * @author Greg Turnquist * @author Oliver Drotbohm */ -@Configuration +@Configuration(proxyBeanMethods = false) @Import(WebMvcEntityLinksConfiguration.class) class WebMvcHateoasConfiguration { diff --git a/src/main/java/org/springframework/hateoas/mediatype/hal/HalMediaTypeConfiguration.java b/src/main/java/org/springframework/hateoas/mediatype/hal/HalMediaTypeConfiguration.java index 7c02a760..6bf15898 100644 --- a/src/main/java/org/springframework/hateoas/mediatype/hal/HalMediaTypeConfiguration.java +++ b/src/main/java/org/springframework/hateoas/mediatype/hal/HalMediaTypeConfiguration.java @@ -40,7 +40,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Greg Turnquist * @author Oliver Drotbohm */ -@Configuration +@Configuration(proxyBeanMethods = false) @RequiredArgsConstructor public class HalMediaTypeConfiguration implements HypermediaMappingInformation {