Commit 426ff3ad authored by Andy Wilkinson's avatar Andy Wilkinson

Store ObjectProvider rather than their Streams to allow reuse

Generally speaking, methods on configuration classes will only be called once
and, therefore, it should be safe to hold a reference to a Stream for later
one-time usage. However, there are some scenarios in Spring Fu where functional
registration results in an attempt being made to use a Stream more than use.

This commit protects against multiple use by storing the ObjectProvider and
getting a new ordered Stream each time it's needed.

Closes gh-14467
parent cc6cf880
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package org.springframework.boot.actuate.autoconfigure.web.jersey; package org.springframework.boot.actuate.autoconfigure.web.jersey;
import java.util.stream.Stream;
import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer; import org.glassfish.jersey.servlet.ServletContainer;
...@@ -47,11 +45,11 @@ import org.springframework.context.annotation.Bean; ...@@ -47,11 +45,11 @@ import org.springframework.context.annotation.Bean;
@ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet") @ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet")
public class JerseyManagementChildContextConfiguration { public class JerseyManagementChildContextConfiguration {
private final Stream<ResourceConfigCustomizer> resourceConfigCustomizers; private final ObjectProvider<ResourceConfigCustomizer> resourceConfigCustomizers;
public JerseyManagementChildContextConfiguration( public JerseyManagementChildContextConfiguration(
ObjectProvider<ResourceConfigCustomizer> resourceConfigCustomizers) { ObjectProvider<ResourceConfigCustomizer> resourceConfigCustomizers) {
this.resourceConfigCustomizers = resourceConfigCustomizers.orderedStream(); this.resourceConfigCustomizers = resourceConfigCustomizers;
} }
@Bean @Bean
...@@ -63,7 +61,7 @@ public class JerseyManagementChildContextConfiguration { ...@@ -63,7 +61,7 @@ public class JerseyManagementChildContextConfiguration {
@Bean @Bean
public ResourceConfig endpointResourceConfig() { public ResourceConfig endpointResourceConfig() {
ResourceConfig resourceConfig = new ResourceConfig(); ResourceConfig resourceConfig = new ResourceConfig();
this.resourceConfigCustomizers this.resourceConfigCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(resourceConfig)); .forEach((customizer) -> customizer.customize(resourceConfig));
return resourceConfig; return resourceConfig;
} }
......
...@@ -20,7 +20,6 @@ import java.io.IOException; ...@@ -20,7 +20,6 @@ import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Stream;
import javax.cache.CacheManager; import javax.cache.CacheManager;
import javax.cache.Caching; import javax.cache.Caching;
...@@ -70,9 +69,9 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware { ...@@ -70,9 +69,9 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware {
private final javax.cache.configuration.Configuration<?, ?> defaultCacheConfiguration; private final javax.cache.configuration.Configuration<?, ?> defaultCacheConfiguration;
private final Stream<JCacheManagerCustomizer> cacheManagerCustomizers; private final ObjectProvider<JCacheManagerCustomizer> cacheManagerCustomizers;
private final Stream<JCachePropertiesCustomizer> cachePropertiesCustomizers; private final ObjectProvider<JCachePropertiesCustomizer> cachePropertiesCustomizers;
private ClassLoader beanClassLoader; private ClassLoader beanClassLoader;
...@@ -84,8 +83,8 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware { ...@@ -84,8 +83,8 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware {
this.cacheProperties = cacheProperties; this.cacheProperties = cacheProperties;
this.customizers = customizers; this.customizers = customizers;
this.defaultCacheConfiguration = defaultCacheConfiguration.getIfAvailable(); this.defaultCacheConfiguration = defaultCacheConfiguration.getIfAvailable();
this.cacheManagerCustomizers = cacheManagerCustomizers.orderedStream(); this.cacheManagerCustomizers = cacheManagerCustomizers;
this.cachePropertiesCustomizers = cachePropertiesCustomizers.orderedStream(); this.cachePropertiesCustomizers = cachePropertiesCustomizers;
} }
@Override @Override
...@@ -135,7 +134,7 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware { ...@@ -135,7 +134,7 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware {
private Properties createCacheManagerProperties() { private Properties createCacheManagerProperties() {
Properties properties = new Properties(); Properties properties = new Properties();
this.cachePropertiesCustomizers.forEach( this.cachePropertiesCustomizers.orderedStream().forEach(
(customizer) -> customizer.customize(this.cacheProperties, properties)); (customizer) -> customizer.customize(this.cacheProperties, properties));
return properties; return properties;
} }
...@@ -148,7 +147,7 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware { ...@@ -148,7 +147,7 @@ class JCacheCacheConfiguration implements BeanClassLoaderAware {
} }
private void customize(CacheManager cacheManager) { private void customize(CacheManager cacheManager) {
this.cacheManagerCustomizers this.cacheManagerCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(cacheManager)); .forEach((customizer) -> customizer.customize(cacheManager));
} }
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.springframework.boot.autoconfigure.cassandra; package org.springframework.boot.autoconfigure.cassandra;
import java.time.Duration; import java.time.Duration;
import java.util.stream.Stream;
import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PoolingOptions; import com.datastax.driver.core.PoolingOptions;
...@@ -51,12 +50,12 @@ public class CassandraAutoConfiguration { ...@@ -51,12 +50,12 @@ public class CassandraAutoConfiguration {
private final CassandraProperties properties; private final CassandraProperties properties;
private final Stream<ClusterBuilderCustomizer> builderCustomizers; private final ObjectProvider<ClusterBuilderCustomizer> builderCustomizers;
public CassandraAutoConfiguration(CassandraProperties properties, public CassandraAutoConfiguration(CassandraProperties properties,
ObjectProvider<ClusterBuilderCustomizer> builderCustomizers) { ObjectProvider<ClusterBuilderCustomizer> builderCustomizers) {
this.properties = properties; this.properties = properties;
this.builderCustomizers = builderCustomizers.orderedStream(); this.builderCustomizers = builderCustomizers;
} }
@Bean @Bean
...@@ -88,7 +87,8 @@ public class CassandraAutoConfiguration { ...@@ -88,7 +87,8 @@ public class CassandraAutoConfiguration {
} }
private void customize(Cluster.Builder builder) { private void customize(Cluster.Builder builder) {
this.builderCustomizers.forEach((customizer) -> customizer.customize(builder)); this.builderCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(builder));
} }
private QueryOptions getQueryOptions() { private QueryOptions getQueryOptions() {
......
...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.data.redis; ...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.data.redis;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.time.Duration; import java.time.Duration;
import java.util.stream.Stream;
import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl.GenericObjectPool;
import redis.clients.jedis.Jedis; import redis.clients.jedis.Jedis;
...@@ -50,7 +49,7 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration { ...@@ -50,7 +49,7 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration {
private final RedisProperties properties; private final RedisProperties properties;
private final Stream<JedisClientConfigurationBuilderCustomizer> builderCustomizers; private final ObjectProvider<JedisClientConfigurationBuilderCustomizer> builderCustomizers;
JedisConnectionConfiguration(RedisProperties properties, JedisConnectionConfiguration(RedisProperties properties,
ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration, ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration,
...@@ -58,7 +57,7 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration { ...@@ -58,7 +57,7 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration {
ObjectProvider<JedisClientConfigurationBuilderCustomizer> builderCustomizers) { ObjectProvider<JedisClientConfigurationBuilderCustomizer> builderCustomizers) {
super(properties, sentinelConfiguration, clusterConfiguration); super(properties, sentinelConfiguration, clusterConfiguration);
this.properties = properties; this.properties = properties;
this.builderCustomizers = builderCustomizers.orderedStream(); this.builderCustomizers = builderCustomizers;
} }
@Bean @Bean
...@@ -131,7 +130,8 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration { ...@@ -131,7 +130,8 @@ class JedisConnectionConfiguration extends RedisConnectionConfiguration {
private void customize( private void customize(
JedisClientConfiguration.JedisClientConfigurationBuilder builder) { JedisClientConfiguration.JedisClientConfigurationBuilder builder) {
this.builderCustomizers.forEach((customizer) -> customizer.customize(builder)); this.builderCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(builder));
} }
} }
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.springframework.boot.autoconfigure.data.redis; package org.springframework.boot.autoconfigure.data.redis;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.stream.Stream;
import io.lettuce.core.RedisClient; import io.lettuce.core.RedisClient;
import io.lettuce.core.resource.ClientResources; import io.lettuce.core.resource.ClientResources;
...@@ -51,7 +50,7 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { ...@@ -51,7 +50,7 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
private final RedisProperties properties; private final RedisProperties properties;
private final Stream<LettuceClientConfigurationBuilderCustomizer> builderCustomizers; private final ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers;
LettuceConnectionConfiguration(RedisProperties properties, LettuceConnectionConfiguration(RedisProperties properties,
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider, ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
...@@ -59,7 +58,7 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { ...@@ -59,7 +58,7 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers) { ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers) {
super(properties, sentinelConfigurationProvider, clusterConfigurationProvider); super(properties, sentinelConfigurationProvider, clusterConfigurationProvider);
this.properties = properties; this.properties = properties;
this.builderCustomizers = builderCustomizers.orderedStream(); this.builderCustomizers = builderCustomizers;
} }
@Bean(destroyMethod = "shutdown") @Bean(destroyMethod = "shutdown")
...@@ -137,7 +136,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration { ...@@ -137,7 +136,8 @@ class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
private void customize( private void customize(
LettuceClientConfiguration.LettuceClientConfigurationBuilder builder) { LettuceClientConfiguration.LettuceClientConfigurationBuilder builder) {
this.builderCustomizers.forEach((customizer) -> customizer.customize(builder)); this.builderCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(builder));
} }
/** /**
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.springframework.boot.autoconfigure.elasticsearch.jest; package org.springframework.boot.autoconfigure.elasticsearch.jest;
import java.time.Duration; import java.time.Duration;
import java.util.stream.Stream;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.searchbox.client.JestClient; import io.searchbox.client.JestClient;
...@@ -54,13 +53,13 @@ public class JestAutoConfiguration { ...@@ -54,13 +53,13 @@ public class JestAutoConfiguration {
private final ObjectProvider<Gson> gsonProvider; private final ObjectProvider<Gson> gsonProvider;
private final Stream<HttpClientConfigBuilderCustomizer> builderCustomizers; private final ObjectProvider<HttpClientConfigBuilderCustomizer> builderCustomizers;
public JestAutoConfiguration(JestProperties properties, ObjectProvider<Gson> gson, public JestAutoConfiguration(JestProperties properties, ObjectProvider<Gson> gson,
ObjectProvider<HttpClientConfigBuilderCustomizer> builderCustomizers) { ObjectProvider<HttpClientConfigBuilderCustomizer> builderCustomizers) {
this.properties = properties; this.properties = properties;
this.gsonProvider = gson; this.gsonProvider = gson;
this.builderCustomizers = builderCustomizers.orderedStream(); this.builderCustomizers = builderCustomizers;
} }
@Bean(destroyMethod = "shutdownClient") @Bean(destroyMethod = "shutdownClient")
...@@ -93,7 +92,8 @@ public class JestAutoConfiguration { ...@@ -93,7 +92,8 @@ public class JestAutoConfiguration {
} }
private void customize(HttpClientConfig.Builder builder) { private void customize(HttpClientConfig.Builder builder) {
this.builderCustomizers.forEach((customizer) -> customizer.customize(builder)); this.builderCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(builder));
} }
} }
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package org.springframework.boot.autoconfigure.elasticsearch.rest; package org.springframework.boot.autoconfigure.elasticsearch.rest;
import java.util.stream.Stream;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope; import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials; import org.apache.http.auth.Credentials;
...@@ -50,12 +48,12 @@ public class RestClientAutoConfiguration { ...@@ -50,12 +48,12 @@ public class RestClientAutoConfiguration {
private final RestClientProperties properties; private final RestClientProperties properties;
private final Stream<RestClientBuilderCustomizer> builderCustomizers; private final ObjectProvider<RestClientBuilderCustomizer> builderCustomizers;
public RestClientAutoConfiguration(RestClientProperties properties, public RestClientAutoConfiguration(RestClientProperties properties,
ObjectProvider<RestClientBuilderCustomizer> builderCustomizers) { ObjectProvider<RestClientBuilderCustomizer> builderCustomizers) {
this.properties = properties; this.properties = properties;
this.builderCustomizers = builderCustomizers.orderedStream(); this.builderCustomizers = builderCustomizers;
} }
@Bean @Bean
...@@ -79,7 +77,8 @@ public class RestClientAutoConfiguration { ...@@ -79,7 +77,8 @@ public class RestClientAutoConfiguration {
builder.setHttpClientConfigCallback((httpClientBuilder) -> httpClientBuilder builder.setHttpClientConfigCallback((httpClientBuilder) -> httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider)); .setDefaultCredentialsProvider(credentialsProvider));
}); });
this.builderCustomizers.forEach((customizer) -> customizer.customize(builder)); this.builderCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(builder));
return builder; return builder;
} }
......
...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.jersey; ...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.jersey;
import java.util.Arrays; import java.util.Arrays;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.stream.Stream;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.servlet.DispatcherType; import javax.servlet.DispatcherType;
...@@ -93,7 +92,7 @@ public class JerseyAutoConfiguration implements ServletContextAware { ...@@ -93,7 +92,7 @@ public class JerseyAutoConfiguration implements ServletContextAware {
private final ResourceConfig config; private final ResourceConfig config;
private final Stream<ResourceConfigCustomizer> customizers; private final ObjectProvider<ResourceConfigCustomizer> customizers;
private String path; private String path;
...@@ -101,7 +100,7 @@ public class JerseyAutoConfiguration implements ServletContextAware { ...@@ -101,7 +100,7 @@ public class JerseyAutoConfiguration implements ServletContextAware {
ObjectProvider<ResourceConfigCustomizer> customizers) { ObjectProvider<ResourceConfigCustomizer> customizers) {
this.jersey = jersey; this.jersey = jersey;
this.config = config; this.config = config;
this.customizers = customizers.orderedStream(); this.customizers = customizers;
} }
@PostConstruct @PostConstruct
...@@ -121,7 +120,8 @@ public class JerseyAutoConfiguration implements ServletContextAware { ...@@ -121,7 +120,8 @@ public class JerseyAutoConfiguration implements ServletContextAware {
} }
private void customize() { private void customize() {
this.customizers.forEach((customizer) -> customizer.customize(this.config)); this.customizers.orderedStream()
.forEach((customizer) -> customizer.customize(this.config));
} }
@Bean @Bean
......
...@@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.jms.artemis; ...@@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.jms.artemis;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.activemq.artemis.jms.server.config.JMSConfiguration; import org.apache.activemq.artemis.jms.server.config.JMSConfiguration;
import org.apache.activemq.artemis.jms.server.config.JMSQueueConfiguration; import org.apache.activemq.artemis.jms.server.config.JMSQueueConfiguration;
...@@ -50,7 +49,7 @@ class ArtemisEmbeddedServerConfiguration { ...@@ -50,7 +49,7 @@ class ArtemisEmbeddedServerConfiguration {
private final ArtemisProperties properties; private final ArtemisProperties properties;
private final Stream<ArtemisConfigurationCustomizer> configurationCustomizers; private final ObjectProvider<ArtemisConfigurationCustomizer> configurationCustomizers;
private final List<JMSQueueConfiguration> queuesConfiguration; private final List<JMSQueueConfiguration> queuesConfiguration;
...@@ -61,7 +60,7 @@ class ArtemisEmbeddedServerConfiguration { ...@@ -61,7 +60,7 @@ class ArtemisEmbeddedServerConfiguration {
ObjectProvider<JMSQueueConfiguration> queuesConfiguration, ObjectProvider<JMSQueueConfiguration> queuesConfiguration,
ObjectProvider<TopicConfiguration> topicsConfiguration) { ObjectProvider<TopicConfiguration> topicsConfiguration) {
this.properties = properties; this.properties = properties;
this.configurationCustomizers = configurationCustomizers.orderedStream(); this.configurationCustomizers = configurationCustomizers;
this.queuesConfiguration = queuesConfiguration.orderedStream() this.queuesConfiguration = queuesConfiguration.orderedStream()
.collect(Collectors.toList()); .collect(Collectors.toList());
this.topicsConfiguration = topicsConfiguration.orderedStream() this.topicsConfiguration = topicsConfiguration.orderedStream()
...@@ -90,7 +89,7 @@ class ArtemisEmbeddedServerConfiguration { ...@@ -90,7 +89,7 @@ class ArtemisEmbeddedServerConfiguration {
private void customize( private void customize(
org.apache.activemq.artemis.core.config.Configuration configuration) { org.apache.activemq.artemis.core.config.Configuration configuration) {
this.configurationCustomizers this.configurationCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(configuration)); .forEach((customizer) -> customizer.customize(configuration));
} }
......
...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.quartz; ...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.quartz;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Stream;
import javax.sql.DataSource; import javax.sql.DataSource;
...@@ -61,7 +60,7 @@ public class QuartzAutoConfiguration { ...@@ -61,7 +60,7 @@ public class QuartzAutoConfiguration {
private final QuartzProperties properties; private final QuartzProperties properties;
private final Stream<SchedulerFactoryBeanCustomizer> customizers; private final ObjectProvider<SchedulerFactoryBeanCustomizer> customizers;
private final JobDetail[] jobDetails; private final JobDetail[] jobDetails;
...@@ -77,7 +76,7 @@ public class QuartzAutoConfiguration { ...@@ -77,7 +76,7 @@ public class QuartzAutoConfiguration {
ObjectProvider<Map<String, Calendar>> calendars, ObjectProvider<Map<String, Calendar>> calendars,
ObjectProvider<Trigger[]> triggers, ApplicationContext applicationContext) { ObjectProvider<Trigger[]> triggers, ApplicationContext applicationContext) {
this.properties = properties; this.properties = properties;
this.customizers = customizers.orderedStream(); this.customizers = customizers;
this.jobDetails = jobDetails.getIfAvailable(); this.jobDetails = jobDetails.getIfAvailable();
this.calendars = calendars.getIfAvailable(); this.calendars = calendars.getIfAvailable();
this.triggers = triggers.getIfAvailable(); this.triggers = triggers.getIfAvailable();
...@@ -124,7 +123,7 @@ public class QuartzAutoConfiguration { ...@@ -124,7 +123,7 @@ public class QuartzAutoConfiguration {
} }
private void customize(SchedulerFactoryBean schedulerFactoryBean) { private void customize(SchedulerFactoryBean schedulerFactoryBean) {
this.customizers this.customizers.orderedStream()
.forEach((customizer) -> customizer.customize(schedulerFactoryBean)); .forEach((customizer) -> customizer.customize(schedulerFactoryBean));
} }
......
...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.thymeleaf; ...@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.thymeleaf;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.stream.Stream;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
...@@ -136,14 +135,14 @@ public class ThymeleafAutoConfiguration { ...@@ -136,14 +135,14 @@ public class ThymeleafAutoConfiguration {
private final Collection<ITemplateResolver> templateResolvers; private final Collection<ITemplateResolver> templateResolvers;
private final Stream<IDialect> dialects; private final ObjectProvider<IDialect> dialects;
public ThymeleafDefaultConfiguration(ThymeleafProperties properties, public ThymeleafDefaultConfiguration(ThymeleafProperties properties,
Collection<ITemplateResolver> templateResolvers, Collection<ITemplateResolver> templateResolvers,
ObjectProvider<IDialect> dialectsProvider) { ObjectProvider<IDialect> dialectsProvider) {
this.properties = properties; this.properties = properties;
this.templateResolvers = templateResolvers; this.templateResolvers = templateResolvers;
this.dialects = dialectsProvider.orderedStream(); this.dialects = dialectsProvider;
} }
@Bean @Bean
...@@ -152,7 +151,7 @@ public class ThymeleafAutoConfiguration { ...@@ -152,7 +151,7 @@ public class ThymeleafAutoConfiguration {
SpringTemplateEngine engine = new SpringTemplateEngine(); SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setEnableSpringELCompiler(this.properties.isEnableSpringElCompiler()); engine.setEnableSpringELCompiler(this.properties.isEnableSpringElCompiler());
this.templateResolvers.forEach(engine::addTemplateResolver); this.templateResolvers.forEach(engine::addTemplateResolver);
this.dialects.forEach(engine::addDialect); this.dialects.orderedStream().forEach(engine::addDialect);
return engine; return engine;
} }
...@@ -224,14 +223,14 @@ public class ThymeleafAutoConfiguration { ...@@ -224,14 +223,14 @@ public class ThymeleafAutoConfiguration {
private final Collection<ITemplateResolver> templateResolvers; private final Collection<ITemplateResolver> templateResolvers;
private final Stream<IDialect> dialects; private final ObjectProvider<IDialect> dialects;
ThymeleafReactiveConfiguration(ThymeleafProperties properties, ThymeleafReactiveConfiguration(ThymeleafProperties properties,
Collection<ITemplateResolver> templateResolvers, Collection<ITemplateResolver> templateResolvers,
ObjectProvider<IDialect> dialectsProvider) { ObjectProvider<IDialect> dialectsProvider) {
this.properties = properties; this.properties = properties;
this.templateResolvers = templateResolvers; this.templateResolvers = templateResolvers;
this.dialects = dialectsProvider.orderedStream(); this.dialects = dialectsProvider;
} }
@Bean @Bean
...@@ -240,7 +239,7 @@ public class ThymeleafAutoConfiguration { ...@@ -240,7 +239,7 @@ public class ThymeleafAutoConfiguration {
SpringWebFluxTemplateEngine engine = new SpringWebFluxTemplateEngine(); SpringWebFluxTemplateEngine engine = new SpringWebFluxTemplateEngine();
engine.setEnableSpringELCompiler(this.properties.isEnableSpringElCompiler()); engine.setEnableSpringELCompiler(this.properties.isEnableSpringElCompiler());
this.templateResolvers.forEach(engine::addTemplateResolver); this.templateResolvers.forEach(engine::addTemplateResolver);
this.dialects.forEach(engine::addDialect); this.dialects.orderedStream().forEach(engine::addDialect);
return engine; return engine;
} }
......
...@@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.web.reactive; ...@@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.web.reactive;
import java.time.Duration; import java.time.Duration;
import java.util.Collection; import java.util.Collection;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
...@@ -114,13 +113,13 @@ public class WebFluxAutoConfiguration { ...@@ -114,13 +113,13 @@ public class WebFluxAutoConfiguration {
private final ListableBeanFactory beanFactory; private final ListableBeanFactory beanFactory;
private final Stream<HandlerMethodArgumentResolver> argumentResolvers; private final ObjectProvider<HandlerMethodArgumentResolver> argumentResolvers;
private final Stream<CodecCustomizer> codecCustomizers; private final ObjectProvider<CodecCustomizer> codecCustomizers;
private final ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer; private final ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;
private final Stream<ViewResolver> viewResolvers; private final ObjectProvider<ViewResolver> viewResolvers;
public WebFluxConfig(ResourceProperties resourceProperties, public WebFluxConfig(ResourceProperties resourceProperties,
WebFluxProperties webFluxProperties, ListableBeanFactory beanFactory, WebFluxProperties webFluxProperties, ListableBeanFactory beanFactory,
...@@ -131,21 +130,21 @@ public class WebFluxAutoConfiguration { ...@@ -131,21 +130,21 @@ public class WebFluxAutoConfiguration {
this.resourceProperties = resourceProperties; this.resourceProperties = resourceProperties;
this.webFluxProperties = webFluxProperties; this.webFluxProperties = webFluxProperties;
this.beanFactory = beanFactory; this.beanFactory = beanFactory;
this.argumentResolvers = resolvers.orderedStream(); this.argumentResolvers = resolvers;
this.codecCustomizers = codecCustomizers.orderedStream(); this.codecCustomizers = codecCustomizers;
this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizer this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizer
.getIfAvailable(); .getIfAvailable();
this.viewResolvers = viewResolvers.orderedStream(); this.viewResolvers = viewResolvers;
} }
@Override @Override
public void configureArgumentResolvers(ArgumentResolverConfigurer configurer) { public void configureArgumentResolvers(ArgumentResolverConfigurer configurer) {
this.argumentResolvers.forEach(configurer::addCustomResolver); this.argumentResolvers.orderedStream().forEach(configurer::addCustomResolver);
} }
@Override @Override
public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) { public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
this.codecCustomizers this.codecCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(configurer)); .forEach((customizer) -> customizer.customize(configurer));
} }
...@@ -181,7 +180,7 @@ public class WebFluxAutoConfiguration { ...@@ -181,7 +180,7 @@ public class WebFluxAutoConfiguration {
@Override @Override
public void configureViewResolvers(ViewResolverRegistry registry) { public void configureViewResolvers(ViewResolverRegistry registry) {
this.viewResolvers.forEach(registry::viewResolver); this.viewResolvers.orderedStream().forEach(registry::viewResolver);
} }
@Override @Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment