Skip to content

Commit 96097c2

Browse files
committed
DATACMNS-1736 - Polishing.
Avoid reuse of Lazy instances for (Sort|Pageable)HandlerMethodArgumentResolver and consistently use those to avoid breaking API changes in configuration classes.
1 parent 9d12ac7 commit 96097c2

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

src/main/java/org/springframework/data/web/config/HateoasAwareSpringDataWebConfiguration.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@
2222
import org.springframework.context.ApplicationContext;
2323
import org.springframework.context.annotation.Bean;
2424
import org.springframework.context.annotation.Configuration;
25-
import org.springframework.context.annotation.Primary;
2625
import org.springframework.core.convert.ConversionService;
2726
import org.springframework.data.util.Lazy;
2827
import org.springframework.data.web.HateoasPageableHandlerMethodArgumentResolver;
2928
import org.springframework.data.web.HateoasSortHandlerMethodArgumentResolver;
30-
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
3129
import org.springframework.data.web.PagedResourcesAssembler;
3230
import org.springframework.data.web.PagedResourcesAssemblerArgumentResolver;
33-
import org.springframework.data.web.SortHandlerMethodArgumentResolver;
3431
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
3532

3633
/**
@@ -42,36 +39,42 @@
4239
* @author Ben Hale
4340
* @author Vedran Pavic
4441
* @author Mark Paluch
42+
* @author Greg Turnquist
4543
*/
4644
@Configuration(proxyBeanMethods = false)
4745
public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfiguration {
4846

49-
private final ApplicationContext context;
47+
private final Lazy<HateoasSortHandlerMethodArgumentResolver> sortResolver;
48+
private final Lazy<HateoasPageableHandlerMethodArgumentResolver> pageableResolver;
49+
private final Lazy<PagedResourcesAssemblerArgumentResolver> argumentResolver;
5050

5151
/**
5252
* @param context must not be {@literal null}.
5353
* @param conversionService must not be {@literal null}.
5454
*/
5555
public HateoasAwareSpringDataWebConfiguration(ApplicationContext context,
5656
@Qualifier("mvcConversionService") ObjectFactory<ConversionService> conversionService) {
57+
5758
super(context, conversionService);
58-
this.context = context;
59+
5960
this.sortResolver = Lazy
60-
.of(() -> context.getBean("hateoasSortResolver", HateoasSortHandlerMethodArgumentResolver.class));
61+
.of(() -> context.getBean("sortResolver", HateoasSortHandlerMethodArgumentResolver.class));
6162
this.pageableResolver = Lazy
62-
.of(() -> context.getBean("hateoasPageableResolver", HateoasPageableHandlerMethodArgumentResolver.class));
63-
63+
.of(() -> context.getBean("pageableResolver", HateoasPageableHandlerMethodArgumentResolver.class));
64+
this.argumentResolver = Lazy.of(() -> context.getBean("pagedResourcesAssemblerArgumentResolver",
65+
PagedResourcesAssemblerArgumentResolver.class));
6466
}
6567

6668
/*
6769
* (non-Javadoc)
6870
* @see org.springframework.data.web.config.SpringDataWebConfiguration#pageableResolver()
6971
*/
72+
@Override
7073
@Bean
71-
public HateoasPageableHandlerMethodArgumentResolver hateoasPageableResolver() {
74+
public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {
7275

7376
HateoasPageableHandlerMethodArgumentResolver pageableResolver = new HateoasPageableHandlerMethodArgumentResolver(
74-
(HateoasSortHandlerMethodArgumentResolver) this.sortResolver.get());
77+
this.sortResolver.get());
7578
customizePageableResolver(pageableResolver);
7679
return pageableResolver;
7780
}
@@ -81,23 +84,22 @@ public HateoasPageableHandlerMethodArgumentResolver hateoasPageableResolver() {
8184
* @see org.springframework.data.web.config.SpringDataWebConfiguration#sortResolver()
8285
*/
8386
@Bean
84-
public HateoasSortHandlerMethodArgumentResolver hateoasSortResolver() {
87+
@Override
88+
public HateoasSortHandlerMethodArgumentResolver sortResolver() {
8589

8690
HateoasSortHandlerMethodArgumentResolver sortResolver = new HateoasSortHandlerMethodArgumentResolver();
8791
customizeSortResolver(sortResolver);
8892
return sortResolver;
8993
}
9094

9195
@Bean
92-
public PagedResourcesAssembler<?> pagedResourcesAssembler(
93-
HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
94-
return new PagedResourcesAssembler<>(pageableResolver, null);
96+
public PagedResourcesAssembler<?> pagedResourcesAssembler() {
97+
return new PagedResourcesAssembler<>(pageableResolver.get(), null);
9598
}
9699

97100
@Bean
98-
public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentResolver(
99-
HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
100-
return new PagedResourcesAssemblerArgumentResolver(pageableResolver, null);
101+
public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentResolver() {
102+
return new PagedResourcesAssemblerArgumentResolver(pageableResolver.get(), null);
101103
}
102104

103105
/*
@@ -106,8 +108,9 @@ public PagedResourcesAssemblerArgumentResolver pagedResourcesAssemblerArgumentRe
106108
*/
107109
@Override
108110
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
111+
109112
super.addArgumentResolvers(argumentResolvers);
110-
argumentResolvers
111-
.add(context.getBean("pagedResourcesAssemblerArgumentResolver", PagedResourcesAssemblerArgumentResolver.class));
113+
114+
argumentResolvers.add(argumentResolver.get());
112115
}
113116
}

src/main/java/org/springframework/data/web/config/SpringDataWebConfiguration.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
* @author Vedran Pavic
5656
* @author Jens Schauder
5757
* @author Mark Paluch
58+
* @author Greg Turnquist
5859
*/
5960
@Configuration(proxyBeanMethods = false)
6061
public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLoaderAware {
@@ -63,8 +64,8 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
6364
private final ObjectFactory<ConversionService> conversionService;
6465
private @Nullable ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader();
6566

66-
protected Lazy<SortHandlerMethodArgumentResolver> sortResolver;
67-
protected Lazy<PageableHandlerMethodArgumentResolver> pageableResolver;
67+
private final Lazy<SortHandlerMethodArgumentResolver> sortResolver;
68+
private final Lazy<PageableHandlerMethodArgumentResolver> pageableResolver;
6869

6970
private @Autowired Optional<PageableHandlerMethodArgumentResolverCustomizer> pageableResolverCustomizer;
7071
private @Autowired Optional<SortHandlerMethodArgumentResolverCustomizer> sortResolverCustomizer;
@@ -96,10 +97,10 @@ public void setBeanClassLoader(ClassLoader classLoader) {
9697
* @see org.springframework.data.web.config.SpringDataWebConfiguration#pageableResolver()
9798
*/
9899
@Bean
99-
public PageableHandlerMethodArgumentResolver pageableResolver(SortHandlerMethodArgumentResolver sortResolver) {
100+
public PageableHandlerMethodArgumentResolver pageableResolver() {
100101

101102
PageableHandlerMethodArgumentResolver pageableResolver = //
102-
new PageableHandlerMethodArgumentResolver(sortResolver);
103+
new PageableHandlerMethodArgumentResolver(sortResolver.get());
103104
customizePageableResolver(pageableResolver);
104105
return pageableResolver;
105106
}
@@ -143,8 +144,8 @@ public void addFormatters(FormatterRegistry registry) {
143144
@Override
144145
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
145146

146-
argumentResolvers.add(this.sortResolver.get());
147-
argumentResolvers.add(this.pageableResolver.get());
147+
argumentResolvers.add(sortResolver.get());
148+
argumentResolvers.add(pageableResolver.get());
148149

149150
ProxyingHandlerMethodArgumentResolver resolver = new ProxyingHandlerMethodArgumentResolver(conversionService, true);
150151
resolver.setBeanFactory(context);
@@ -193,5 +194,4 @@ private void forwardBeanClassLoader(BeanClassLoaderAware target) {
193194
target.setBeanClassLoader(beanClassLoader);
194195
}
195196
}
196-
197197
}

0 commit comments

Comments
 (0)