From 4b36f794dca3866cd817f7f48f05d4ab6b8edd34 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Fri, 26 Mar 2021 13:48:38 +0100 Subject: [PATCH] Avoid RepositoryRestConfigurerDelegate exposed as bean. Improving the configuration situation for RRCD, whose bean declaration required access to all RepositoryRestConfigurer instances while implementing the interface itself, too. We now rather hide the creation of that instance in a Lazy as it doesn't need any kind of lifecycle management. --- .../RepositoryRestConfigurerDelegate.java | 2 +- .../RepositoryRestMvcConfiguration.java | 26 +++++++++---------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java index f0ef2b332..7c4000dff 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java @@ -34,7 +34,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Oliver Gierke * @soundtrack Florian Reichelt & Max Ender - Abschlusskonzert (https://www.youtube.com/watch?v=5WP0P-ndinY) */ -public class RepositoryRestConfigurerDelegate implements RepositoryRestConfigurer { +class RepositoryRestConfigurerDelegate implements RepositoryRestConfigurer { private final Iterable delegates; diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java index 68121476a..588e07097 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java @@ -259,17 +259,16 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon new DefaultRepositoryInvokerFactory(repositories.get(), defaultConversionService), getEntityLookups())); this.defaultConversionService = new DefaultFormattingConversionService(); - this.configurerDelegate = Lazy.of(() -> context.getBean(RepositoryRestConfigurerDelegate.class)); + + this.configurerDelegate = Lazy.of(() -> { + return new RepositoryRestConfigurerDelegate(context.getBeansOfType(RepositoryRestConfigurer.class).values()); + }); + this.repositoryRestConfiguration = Lazy.of(() -> context.getBean(RepositoryRestConfiguration.class)); this.pageableResolver = Lazy.of(() -> context.getBean(HateoasPageableHandlerMethodArgumentResolver.class)); this.sortResolver = Lazy.of(() -> context.getBean(HateoasSortHandlerMethodArgumentResolver.class)); } - @Bean - public static RepositoryRestConfigurerDelegate configurerDelegate(List configurers) { - return new RepositoryRestConfigurerDelegate(configurers); - } - /* * (non-Javadoc) * @see org.springframework.beans.factory.BeanClassLoaderAware#setBeanClassLoader(java.lang.ClassLoader) @@ -305,8 +304,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon @Bean @Qualifier public DefaultFormattingConversionService defaultConversionService(PersistentEntities persistentEntities, - RepositoryInvokerFactory repositoryInvokerFactory, Repositories repositories, - RepositoryRestConfigurerDelegate configurerDelegate) { + RepositoryInvokerFactory repositoryInvokerFactory, Repositories repositories) { DefaultFormattingConversionService conversionService = (DefaultFormattingConversionService) defaultConversionService; @@ -316,7 +314,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon conversionService.addConverter(StringToLdapNameConverter.INSTANCE); addFormatters(conversionService); - configurerDelegate.configureConversionService(conversionService); + configurerDelegate.get().configureConversionService(conversionService); return conversionService; } @@ -326,11 +324,11 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon * {@link org.springframework.validation.Validator} instances assigned to specific domain types. */ @Bean - public ValidatingRepositoryEventListener validatingRepositoryEventListener(ObjectFactory entities, - RepositoryRestConfigurerDelegate configurerDelegate) { + public ValidatingRepositoryEventListener validatingRepositoryEventListener( + ObjectFactory entities) { ValidatingRepositoryEventListener listener = new ValidatingRepositoryEventListener(entities); - configurerDelegate.configureValidatingRepositoryEventListener(listener); + configurerDelegate.get().configureValidatingRepositoryEventListener(listener); return listener; } @@ -775,7 +773,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon @Qualifier("halJacksonHttpMessageConverter") TypeConstrainedMappingJackson2HttpMessageConverter halJacksonHttpMessageConverter, @Qualifier("halFormsJacksonHttpMessageConverter") TypeConstrainedMappingJackson2HttpMessageConverter halFormsJacksonHttpMessageConverter, AlpsJsonHttpMessageConverter alpsJsonHttpMessageConverter, - UriListHttpMessageConverter uriListHttpMessageConverter, RepositoryRestConfigurerDelegate configurerDelegate, + UriListHttpMessageConverter uriListHttpMessageConverter, RepositoryRestConfiguration repositoryRestConfiguration) { List> messageConverters = new ArrayList<>(); @@ -800,7 +798,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon messageConverters.add(fallbackJsonConverter); messageConverters.add(uriListHttpMessageConverter); - configurerDelegate.configureHttpMessageConverters(messageConverters); + configurerDelegate.get().configureHttpMessageConverters(messageConverters); return messageConverters; }