diff --git a/src/main/java/org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.java b/src/main/java/org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.java index 8563fdcfe..886f25214 100644 --- a/src/main/java/org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.java +++ b/src/main/java/org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.java @@ -22,15 +22,12 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; import org.springframework.core.convert.ConversionService; import org.springframework.data.util.Lazy; import org.springframework.data.web.HateoasPageableHandlerMethodArgumentResolver; import org.springframework.data.web.HateoasSortHandlerMethodArgumentResolver; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.data.web.PagedResourcesAssembler; import org.springframework.data.web.PagedResourcesAssemblerArgumentResolver; -import org.springframework.data.web.SortHandlerMethodArgumentResolver; import org.springframework.web.method.support.HandlerMethodArgumentResolver; /** @@ -42,11 +39,14 @@ import org.springframework.web.method.support.HandlerMethodArgumentResolver; * @author Ben Hale * @author Vedran Pavic * @author Mark Paluch + * @author Greg Turnquist */ @Configuration(proxyBeanMethods = false) public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfiguration { - private final ApplicationContext context; + private final Lazy sortResolver; + private final Lazy pageableResolver; + private final Lazy argumentResolver; /** * @param context must not be {@literal null}. @@ -54,24 +54,27 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu */ public HateoasAwareSpringDataWebConfiguration(ApplicationContext context, @Qualifier("mvcConversionService") ObjectFactory conversionService) { - super(context, conversionService); - this.context = context; - this.sortResolver = Lazy - .of(() -> context.getBean("hateoasSortResolver", HateoasSortHandlerMethodArgumentResolver.class)); - this.pageableResolver = Lazy - .of(() -> context.getBean("hateoasPageableResolver", HateoasPageableHandlerMethodArgumentResolver.class)); + super(context, conversionService); + + this.sortResolver = Lazy + .of(() -> context.getBean("sortResolver", HateoasSortHandlerMethodArgumentResolver.class)); + this.pageableResolver = Lazy + .of(() -> context.getBean("pageableResolver", HateoasPageableHandlerMethodArgumentResolver.class)); + this.argumentResolver = Lazy.of(() -> context.getBean("pagedResourcesAssemblerArgumentResolver", + PagedResourcesAssemblerArgumentResolver.class)); } /* * (non-Javadoc) * @see org.springframework.data.web.config.SpringDataWebConfiguration#pageableResolver() */ + @Override @Bean - public HateoasPageableHandlerMethodArgumentResolver hateoasPageableResolver() { + public HateoasPageableHandlerMethodArgumentResolver pageableResolver() { HateoasPageableHandlerMethodArgumentResolver pageableResolver = new HateoasPageableHandlerMethodArgumentResolver( - (HateoasSortHandlerMethodArgumentResolver) this.sortResolver.get()); + this.sortResolver.get()); customizePageableResolver(pageableResolver); return pageableResolver; } @@ -81,7 +84,8 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu * @see org.springframework.data.web.config.SpringDataWebConfiguration#sortResolver() */ @Bean - public HateoasSortHandlerMethodArgumentResolver hateoasSortResolver() { + @Override + public HateoasSortHandlerMethodArgumentResolver sortResolver() { HateoasSortHandlerMethodArgumentResolver sortResolver = new HateoasSortHandlerMethodArgumentResolver(); customizeSortResolver(sortResolver); @@ -89,15 +93,13 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu } @Bean - public PagedResourcesAssembler pagedResourcesAssembler( - HateoasPageableHandlerMethodArgumentResolver pageableResolver) { - return new PagedResourcesAssembler<>(pageableResolver, null); + public PagedResourcesAssembler pagedResourcesAssembler() { + return new PagedResourcesAssembler<>(pageableResolver.get(), null); } @Bean - public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentResolver( - HateoasPageableHandlerMethodArgumentResolver pageableResolver) { - return new PagedResourcesAssemblerArgumentResolver(pageableResolver, null); + public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentResolver() { + return new PagedResourcesAssemblerArgumentResolver(pageableResolver.get(), null); } /* @@ -106,8 +108,9 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu */ @Override public void addArgumentResolvers(List argumentResolvers) { + super.addArgumentResolvers(argumentResolvers); - argumentResolvers - .add(context.getBean("pagedResourcesAssemblerArgumentResolver", PagedResourcesAssemblerArgumentResolver.class)); + + argumentResolvers.add(argumentResolver.get()); } } diff --git a/src/main/java/org/springframework/data/web/config/SpringDataWebConfiguration.java b/src/main/java/org/springframework/data/web/config/SpringDataWebConfiguration.java index 4f0f6768c..a582388de 100644 --- a/src/main/java/org/springframework/data/web/config/SpringDataWebConfiguration.java +++ b/src/main/java/org/springframework/data/web/config/SpringDataWebConfiguration.java @@ -55,6 +55,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Vedran Pavic * @author Jens Schauder * @author Mark Paluch + * @author Greg Turnquist */ @Configuration(proxyBeanMethods = false) public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLoaderAware { @@ -63,8 +64,8 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo private final ObjectFactory conversionService; private @Nullable ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader(); - protected Lazy sortResolver; - protected Lazy pageableResolver; + private final Lazy sortResolver; + private final Lazy pageableResolver; private @Autowired Optional pageableResolverCustomizer; private @Autowired Optional sortResolverCustomizer; @@ -96,10 +97,10 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo * @see org.springframework.data.web.config.SpringDataWebConfiguration#pageableResolver() */ @Bean - public PageableHandlerMethodArgumentResolver pageableResolver(SortHandlerMethodArgumentResolver sortResolver) { + public PageableHandlerMethodArgumentResolver pageableResolver() { PageableHandlerMethodArgumentResolver pageableResolver = // - new PageableHandlerMethodArgumentResolver(sortResolver); + new PageableHandlerMethodArgumentResolver(sortResolver.get()); customizePageableResolver(pageableResolver); return pageableResolver; } @@ -143,8 +144,8 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo @Override public void addArgumentResolvers(List argumentResolvers) { - argumentResolvers.add(this.sortResolver.get()); - argumentResolvers.add(this.pageableResolver.get()); + argumentResolvers.add(sortResolver.get()); + argumentResolvers.add(pageableResolver.get()); ProxyingHandlerMethodArgumentResolver resolver = new ProxyingHandlerMethodArgumentResolver(conversionService, true); resolver.setBeanFactory(context); @@ -193,5 +194,4 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo target.setBeanClassLoader(beanClassLoader); } } - }