DATACMNS-1736 - Switch away from overrideable methods.

This commit is contained in:
Greg L. Turnquist
2020-08-26 19:00:38 -05:00
committed by Oliver Drotbohm
parent c10072c96f
commit 9d12ac7324
3 changed files with 31 additions and 39 deletions

View File

@@ -22,11 +22,15 @@ 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;
/**
@@ -52,6 +56,11 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
@Qualifier("mvcConversionService") ObjectFactory<ConversionService> 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));
}
/*
@@ -59,11 +68,10 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
* @see org.springframework.data.web.config.SpringDataWebConfiguration#pageableResolver()
*/
@Bean
@Override
public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {
public HateoasPageableHandlerMethodArgumentResolver hateoasPageableResolver() {
HateoasPageableHandlerMethodArgumentResolver pageableResolver = new HateoasPageableHandlerMethodArgumentResolver(
getSortResolverBean());
(HateoasSortHandlerMethodArgumentResolver) this.sortResolver.get());
customizePageableResolver(pageableResolver);
return pageableResolver;
}
@@ -73,8 +81,7 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
* @see org.springframework.data.web.config.SpringDataWebConfiguration#sortResolver()
*/
@Bean
@Override
public HateoasSortHandlerMethodArgumentResolver sortResolver() {
public HateoasSortHandlerMethodArgumentResolver hateoasSortResolver() {
HateoasSortHandlerMethodArgumentResolver sortResolver = new HateoasSortHandlerMethodArgumentResolver();
customizeSortResolver(sortResolver);
@@ -82,13 +89,15 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
}
@Bean
public PagedResourcesAssembler<?> pagedResourcesAssembler() {
return new PagedResourcesAssembler<>(getPageableResolverBean(), null);
public PagedResourcesAssembler<?> pagedResourcesAssembler(
HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
return new PagedResourcesAssembler<>(pageableResolver, null);
}
@Bean
public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentResolver() {
return new PagedResourcesAssemblerArgumentResolver(getPageableResolverBean(), null);
public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentResolver(
HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
return new PagedResourcesAssemblerArgumentResolver(pageableResolver, null);
}
/*
@@ -101,20 +110,4 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
argumentResolvers
.add(context.getBean("pagedResourcesAssemblerArgumentResolver", PagedResourcesAssemblerArgumentResolver.class));
}
/*
* (non-Javadoc)
* @see org.springframework.data.web.config.SpringDataWebConfiguration#getSortResolverBean()
*/
protected HateoasSortHandlerMethodArgumentResolver getSortResolverBean() {
return context.getBean("sortResolver", HateoasSortHandlerMethodArgumentResolver.class);
}
/*
* (non-Javadoc)
* @see org.springframework.data.web.config.SpringDataWebConfiguration#getPageableResolverBean()
*/
protected HateoasPageableHandlerMethodArgumentResolver getPageableResolverBean() {
return context.getBean("pageableResolver", HateoasPageableHandlerMethodArgumentResolver.class);
}
}

View File

@@ -29,6 +29,7 @@ import org.springframework.core.convert.ConversionService;
import org.springframework.data.geo.format.DistanceFormatter;
import org.springframework.data.geo.format.PointFormatter;
import org.springframework.data.repository.support.DomainClassConverter;
import org.springframework.data.util.Lazy;
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.data.web.ProjectingJackson2HttpMessageConverter;
import org.springframework.data.web.ProxyingHandlerMethodArgumentResolver;
@@ -62,6 +63,9 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
private final ObjectFactory<ConversionService> conversionService;
private @Nullable ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader();
protected Lazy<SortHandlerMethodArgumentResolver> sortResolver;
protected Lazy<PageableHandlerMethodArgumentResolver> pageableResolver;
private @Autowired Optional<PageableHandlerMethodArgumentResolverCustomizer> pageableResolverCustomizer;
private @Autowired Optional<SortHandlerMethodArgumentResolverCustomizer> sortResolverCustomizer;
@@ -73,6 +77,9 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
this.context = context;
this.conversionService = conversionService;
this.sortResolver = Lazy.of(() -> context.getBean("sortResolver", SortHandlerMethodArgumentResolver.class));
this.pageableResolver = Lazy
.of(() -> context.getBean("pageableResolver", PageableHandlerMethodArgumentResolver.class));
}
/*
@@ -89,10 +96,10 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
* @see org.springframework.data.web.config.SpringDataWebConfiguration#pageableResolver()
*/
@Bean
public PageableHandlerMethodArgumentResolver pageableResolver() {
public PageableHandlerMethodArgumentResolver pageableResolver(SortHandlerMethodArgumentResolver sortResolver) {
PageableHandlerMethodArgumentResolver pageableResolver = //
new PageableHandlerMethodArgumentResolver(getSortResolverBean());
new PageableHandlerMethodArgumentResolver(sortResolver);
customizePageableResolver(pageableResolver);
return pageableResolver;
}
@@ -136,8 +143,8 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(getSortResolverBean());
argumentResolvers.add(getPageableResolverBean());
argumentResolvers.add(this.sortResolver.get());
argumentResolvers.add(this.pageableResolver.get());
ProxyingHandlerMethodArgumentResolver resolver = new ProxyingHandlerMethodArgumentResolver(conversionService, true);
resolver.setBeanFactory(context);
@@ -172,14 +179,6 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
}
}
protected SortHandlerMethodArgumentResolver getSortResolverBean() {
return context.getBean("sortResolver", SortHandlerMethodArgumentResolver.class);
}
protected PageableHandlerMethodArgumentResolver getPageableResolverBean() {
return context.getBean("pageableResolver", PageableHandlerMethodArgumentResolver.class);
}
protected void customizePageableResolver(PageableHandlerMethodArgumentResolver pageableResolver) {
pageableResolverCustomizer.ifPresent(c -> c.customize(pageableResolver));
}