RepositoryRestConfigurer are again used in declared order.

4b36f79 introduced a regression by consuming registered RepositoryRestConfigurer instances via ApplicationContext.getBeansOfType(…).values() which, unlike the previous consumption via a List<RRC> in an @Bean method, is losing the declared order of the RRC instances as ….getBeansOfType() is a Map.

We now rather use an ObjectProvider and its ….orderedStream() method to consume the registered instances ordered properly.

Fixes #1995.
This commit is contained in:
Oliver Drotbohm
2021-04-09 12:42:24 +02:00
parent b4b8fdfee0
commit 6c007487c7
2 changed files with 32 additions and 2 deletions

View File

@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.BeanFactoryUtils;
@@ -259,7 +260,10 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon
this.defaultConversionService = new DefaultFormattingConversionService();
this.configurerDelegate = Lazy.of(() -> {
return new RepositoryRestConfigurerDelegate(context.getBeansOfType(RepositoryRestConfigurer.class).values());
return new RepositoryRestConfigurerDelegate(context.getBeanProvider(RepositoryRestConfigurer.class)
.orderedStream()
.collect(Collectors.toList()));
});
this.repositoryRestConfiguration = Lazy.of(() -> context.getBean(RepositoryRestConfiguration.class));