Fix resource-chain XML syntax for cache

This change moves the resource-cache configuration to the
<resource-chain/> tag, since enabling/disabling resource cache should
be driven by a property or a SpEL expression.

So now that configuration can be set with XML attributes:

  <mvc:resource-chain resource-cache="true"
  cache-manager="resourceCache" cache-name="test-resource-cache">

In order to mirror the JavaConfig behavior, the "resource-cache"
attribute is required.

Issue: SPR-12129
This commit is contained in:
Brian Clozel
2014-09-04 10:05:33 +02:00
parent c9c3857eae
commit 7b93cefe64
5 changed files with 15 additions and 22 deletions

View File

@@ -200,8 +200,8 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
private void parseResourceCache(ManagedList<? super Object> resourceResolvers,
ManagedList<? super Object> resourceTransformers, Element element, Object source) {
Element resourceCacheElement = DomUtils.getChildElementByTagName(element, "resource-cache");
if (resourceCacheElement != null) {
String resourceCache = element.getAttribute("resource-cache");
if ("true".equals(resourceCache)) {
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class);
@@ -214,8 +214,8 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
cachingTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
cachingTransformerDef.setConstructorArgumentValues(cavs);
String cacheManagerName = resourceCacheElement.getAttribute("cache-manager");
String cacheName = resourceCacheElement.getAttribute("cache-name");
String cacheManagerName = element.getAttribute("cache-manager");
String cacheName = element.getAttribute("cache-name");
if (StringUtils.hasText(cacheManagerName) && StringUtils.hasText(cacheName)) {
RuntimeBeanReference cacheManagerRef = new RuntimeBeanReference(cacheManagerName);
cavs.addIndexedArgumentValue(0, cacheManagerRef);

View File

@@ -99,7 +99,7 @@ public class ResourceHandlerRegistration {
*
* @param cacheResources whether to cache the result of resource resolution;
* setting this to "true" is recommended for production (and "false" for
* development, especially when applying a version strategy.
* development, especially when applying a version strategy).
* @return the same {@link ResourceHandlerRegistration} instance for chained method invocation
* @since 4.1
*/