From a04e913c2258ae843d58d02a22be5adc6ce627fa Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 24 Sep 2018 10:20:25 -0400 Subject: [PATCH] Make ResourceHandlerRegistrationCustomizer public Make `ResourceHandlerRegistrationCustomizer` a public top level class. Closes gh-14587 --- ...ResourceHandlerRegistrationCustomizer.java | 76 +++++++++++++++++++ ...ResourceHandlerRegistrationCustomizer.java | 36 +++++++++ .../reactive/WebFluxAutoConfiguration.java | 56 -------------- 3 files changed, 112 insertions(+), 56 deletions(-) create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceChainResourceHandlerRegistrationCustomizer.java create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceHandlerRegistrationCustomizer.java diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceChainResourceHandlerRegistrationCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceChainResourceHandlerRegistrationCustomizer.java new file mode 100644 index 0000000000..7a93244476 --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceChainResourceHandlerRegistrationCustomizer.java @@ -0,0 +1,76 @@ +/* + * Copyright 2012-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.web.reactive; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.web.ResourceProperties; +import org.springframework.web.reactive.config.ResourceChainRegistration; +import org.springframework.web.reactive.config.ResourceHandlerRegistration; +import org.springframework.web.reactive.resource.AppCacheManifestTransformer; +import org.springframework.web.reactive.resource.EncodedResourceResolver; +import org.springframework.web.reactive.resource.ResourceResolver; +import org.springframework.web.reactive.resource.VersionResourceResolver; + +/** + * {@link ResourceHandlerRegistrationCustomizer} used by auto-configuration to customize + * the resource chain. + * + * @author Brian Clozel + */ +class ResourceChainResourceHandlerRegistrationCustomizer + implements ResourceHandlerRegistrationCustomizer { + + @Autowired + private ResourceProperties resourceProperties = new ResourceProperties(); + + @Override + public void customize(ResourceHandlerRegistration registration) { + ResourceProperties.Chain properties = this.resourceProperties.getChain(); + configureResourceChain(properties, + registration.resourceChain(properties.isCache())); + } + + private void configureResourceChain(ResourceProperties.Chain properties, + ResourceChainRegistration chain) { + ResourceProperties.Strategy strategy = properties.getStrategy(); + if (properties.isCompressed()) { + chain.addResolver(new EncodedResourceResolver()); + } + if (strategy.getFixed().isEnabled() || strategy.getContent().isEnabled()) { + chain.addResolver(getVersionResourceResolver(strategy)); + } + if (properties.isHtmlApplicationCache()) { + chain.addTransformer(new AppCacheManifestTransformer()); + } + } + + private ResourceResolver getVersionResourceResolver( + ResourceProperties.Strategy properties) { + VersionResourceResolver resolver = new VersionResourceResolver(); + if (properties.getFixed().isEnabled()) { + String version = properties.getFixed().getVersion(); + String[] paths = properties.getFixed().getPaths(); + resolver.addFixedVersionStrategy(version, paths); + } + if (properties.getContent().isEnabled()) { + String[] paths = properties.getContent().getPaths(); + resolver.addContentVersionStrategy(paths); + } + return resolver; + } + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceHandlerRegistrationCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceHandlerRegistrationCustomizer.java new file mode 100644 index 0000000000..983bdeaae3 --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ResourceHandlerRegistrationCustomizer.java @@ -0,0 +1,36 @@ +/* + * Copyright 2012-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.web.reactive; + +import org.springframework.web.reactive.config.ResourceHandlerRegistration; + +/** + * Callback interface that can be used to customize {@link ResourceHandlerRegistration}. + * + * @author Brian Clozel + * @since 2.1.0 + */ +@FunctionalInterface +public interface ResourceHandlerRegistrationCustomizer { + + /** + * Customize the given {@link ResourceHandlerRegistration}. + * @param registration the registration to customize + */ + void customize(ResourceHandlerRegistration registration); + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java index 69c67aabb0..8c4c06fc62 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java @@ -25,7 +25,6 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -57,16 +56,11 @@ import org.springframework.validation.Validator; import org.springframework.web.filter.reactive.HiddenHttpMethodFilter; import org.springframework.web.reactive.config.DelegatingWebFluxConfiguration; import org.springframework.web.reactive.config.EnableWebFlux; -import org.springframework.web.reactive.config.ResourceChainRegistration; import org.springframework.web.reactive.config.ResourceHandlerRegistration; import org.springframework.web.reactive.config.ResourceHandlerRegistry; import org.springframework.web.reactive.config.ViewResolverRegistry; import org.springframework.web.reactive.config.WebFluxConfigurationSupport; import org.springframework.web.reactive.config.WebFluxConfigurer; -import org.springframework.web.reactive.resource.AppCacheManifestTransformer; -import org.springframework.web.reactive.resource.EncodedResourceResolver; -import org.springframework.web.reactive.resource.ResourceResolver; -import org.springframework.web.reactive.resource.VersionResourceResolver; import org.springframework.web.reactive.result.method.HandlerMethodArgumentResolver; import org.springframework.web.reactive.result.method.annotation.ArgumentResolverConfigurer; import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter; @@ -277,54 +271,4 @@ public class WebFluxAutoConfiguration { } - interface ResourceHandlerRegistrationCustomizer { - - void customize(ResourceHandlerRegistration registration); - - } - - static class ResourceChainResourceHandlerRegistrationCustomizer - implements ResourceHandlerRegistrationCustomizer { - - @Autowired - private ResourceProperties resourceProperties = new ResourceProperties(); - - @Override - public void customize(ResourceHandlerRegistration registration) { - ResourceProperties.Chain properties = this.resourceProperties.getChain(); - configureResourceChain(properties, - registration.resourceChain(properties.isCache())); - } - - private void configureResourceChain(ResourceProperties.Chain properties, - ResourceChainRegistration chain) { - ResourceProperties.Strategy strategy = properties.getStrategy(); - if (properties.isCompressed()) { - chain.addResolver(new EncodedResourceResolver()); - } - if (strategy.getFixed().isEnabled() || strategy.getContent().isEnabled()) { - chain.addResolver(getVersionResourceResolver(strategy)); - } - if (properties.isHtmlApplicationCache()) { - chain.addTransformer(new AppCacheManifestTransformer()); - } - } - - private ResourceResolver getVersionResourceResolver( - ResourceProperties.Strategy properties) { - VersionResourceResolver resolver = new VersionResourceResolver(); - if (properties.getFixed().isEnabled()) { - String version = properties.getFixed().getVersion(); - String[] paths = properties.getFixed().getPaths(); - resolver.addFixedVersionStrategy(version, paths); - } - if (properties.getContent().isEnabled()) { - String[] paths = properties.getContent().getPaths(); - resolver.addContentVersionStrategy(paths); - } - return resolver; - } - - } - }