From c08ded769a334a77ef3e2eb8ea2c2fe15cd8e3ab Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 9 Aug 2014 00:19:56 +0200 Subject: [PATCH] Polishing (includes varargs for selected String array setters) --- .../aop/aspectj/AbstractAspectJAdvice.java | 4 +- .../AspectJExpressionPointcutAdvisor.java | 20 +- .../aop/framework/ProxyFactoryBean.java | 4 +- .../autoproxy/AbstractAutoProxyCreator.java | 4 +- .../autoproxy/BeanNameAutoProxyCreator.java | 4 +- .../aop/support/NameMatchMethodPointcut.java | 6 +- .../NameMatchMethodPointcutAdvisor.java | 4 +- .../support/RegexpMethodPointcutAdvisor.java | 6 +- .../aspectj/AnnotationBeanConfigurerAspect.aj | 2 +- .../javamail/ConfigurableMimeFileTypeMap.java | 4 +- .../SpringCacheAnnotationParser.java | 71 ++-- .../cache/interceptor/CacheOperation.java | 101 ++++-- .../ClassPathBeanDefinitionScanner.java | 4 +- .../MethodExclusionMBeanInfoAssembler.java | 4 +- .../export/metadata/ManagedNotification.java | 4 +- .../jndi/support/SimpleJndiBeanFactory.java | 19 +- .../core/PreparedStatementCreatorFactory.java | 2 +- .../core/metadata/TableMetaDataContext.java | 5 +- .../jdbc/core/simple/AbstractJdbcInsert.java | 18 +- .../jdbc/object/RdbmsOperation.java | 4 +- .../oxm/jaxb/Jaxb2Marshaller.java | 2 +- .../ContextConfigurationAttributes.java | 317 +++++++----------- .../UserRoleAuthorizationInterceptor.java | 5 +- .../UserRoleAuthorizationInterceptor.java | 4 +- .../ParameterMethodNameResolver.java | 4 +- .../AbstractControllerUrlHandlerMapping.java | 6 +- .../servlet/support/WebContentGenerator.java | 4 +- .../web/servlet/view/AbstractView.java | 6 +- .../servlet/view/InternalResourceView.java | 4 +- .../view/InternalResourceViewResolver.java | 8 +- .../view/ResourceBundleViewResolver.java | 4 +- .../servlet/view/UrlBasedViewResolver.java | 60 ++-- .../AbstractJasperReportsView.java | 2 +- .../JasperReportsViewResolver.java | 4 +- 34 files changed, 353 insertions(+), 367 deletions(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java index 0fdd073546e..296fdd5b0f8 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -240,7 +240,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence setArgumentNamesFromStringArray(tokens); } - public void setArgumentNamesFromStringArray(String[] args) { + public void setArgumentNamesFromStringArray(String... args) { this.argumentNames = new String[args.length]; for (int i = 0; i < args.length; i++) { this.argumentNames[i] = StringUtils.trimWhitespace(args[i]); diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcutAdvisor.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcutAdvisor.java index 9430c3de44f..9de941958c7 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcutAdvisor.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcutAdvisor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -40,24 +40,24 @@ public class AspectJExpressionPointcutAdvisor extends AbstractGenericPointcutAdv this.pointcut.setExpression(expression); } + public String getExpression() { + return this.pointcut.getExpression(); + } + public void setLocation(String location) { this.pointcut.setLocation(location); } + public String getLocation() { + return this.pointcut.getLocation(); + } + public void setParameterTypes(Class[] types) { this.pointcut.setParameterTypes(types); } - public void setParameterNames(String[] names) { + public void setParameterNames(String... names) { this.pointcut.setParameterNames(names); } - public String getLocation() { - return this.pointcut.getLocation(); - } - - public String getExpression() { - return this.pointcut.getExpression(); - } - } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java index d7b5c33a218..62c43c30b05 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -154,7 +154,7 @@ public class ProxyFactoryBean extends ProxyCreatorSupport * @see org.aopalliance.aop.Advice * @see org.springframework.aop.target.SingletonTargetSource */ - public void setInterceptorNames(String[] interceptorNames) { + public void setInterceptorNames(String... interceptorNames) { this.interceptorNames = interceptorNames; } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java index 52f8e4f54ac..628cff540d5 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java @@ -205,7 +205,7 @@ public abstract class AbstractAutoProxyCreator extends ProxyConfig * Ordering is significant: The TargetSource returned from the first matching * TargetSourceCreator (that is, the first that returns non-null) will be used. */ - public void setCustomTargetSourceCreators(TargetSourceCreator[] targetSourceCreators) { + public void setCustomTargetSourceCreators(TargetSourceCreator... targetSourceCreators) { this.customTargetSourceCreators = targetSourceCreators; } @@ -216,7 +216,7 @@ public abstract class AbstractAutoProxyCreator extends ProxyConfig * This is perfectly valid, if "specific" interceptors such as matching * Advisors are all we want. */ - public void setInterceptorNames(String[] interceptorNames) { + public void setInterceptorNames(String... interceptorNames) { this.interceptorNames = interceptorNames; } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java index a11180d07e3..5ae853dc365 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -60,7 +60,7 @@ public class BeanNameAutoProxyCreator extends AbstractAutoProxyCreator { * @see org.springframework.beans.factory.FactoryBean * @see org.springframework.beans.factory.BeanFactory#FACTORY_BEAN_PREFIX */ - public void setBeanNames(String[] beanNames) { + public void setBeanNames(String... beanNames) { Assert.notEmpty(beanNames, "'beanNames' must not be empty"); this.beanNames = new ArrayList(beanNames.length); for (String mappedName : beanNames) { diff --git a/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java b/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java index 3c99b06e5e0..05577f7d6c4 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -47,7 +47,7 @@ public class NameMatchMethodPointcut extends StaticMethodMatcherPointcut impleme * @see #setMappedNames */ public void setMappedName(String mappedName) { - setMappedNames(new String[] {mappedName}); + setMappedNames(mappedName); } /** @@ -55,7 +55,7 @@ public class NameMatchMethodPointcut extends StaticMethodMatcherPointcut impleme * Matching will be the union of all these; if any match, * the pointcut matches. */ - public void setMappedNames(String[] mappedNames) { + public void setMappedNames(String... mappedNames) { this.mappedNames = new LinkedList(); if (mappedNames != null) { this.mappedNames.addAll(Arrays.asList(mappedNames)); diff --git a/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcutAdvisor.java b/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcutAdvisor.java index 375ecdeac7b..dec2cbce271 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcutAdvisor.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcutAdvisor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -68,7 +68,7 @@ public class NameMatchMethodPointcutAdvisor extends AbstractGenericPointcutAdvis * the pointcut matches. * @see NameMatchMethodPointcut#setMappedNames */ - public void setMappedNames(String[] mappedNames) { + public void setMappedNames(String... mappedNames) { this.pointcut.setMappedNames(mappedNames); } diff --git a/spring-aop/src/main/java/org/springframework/aop/support/RegexpMethodPointcutAdvisor.java b/spring-aop/src/main/java/org/springframework/aop/support/RegexpMethodPointcutAdvisor.java index 177fe9b277b..2d88b45c75e 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/RegexpMethodPointcutAdvisor.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/RegexpMethodPointcutAdvisor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -98,7 +98,7 @@ public class RegexpMethodPointcutAdvisor extends AbstractGenericPointcutAdvisor * @see #setPatterns */ public void setPattern(String pattern) { - setPatterns(new String[] {pattern}); + setPatterns(pattern); } /** @@ -108,7 +108,7 @@ public class RegexpMethodPointcutAdvisor extends AbstractGenericPointcutAdvisor * patterns matches, the pointcut matches. * @see AbstractRegexpMethodPointcut#setPatterns */ - public void setPatterns(String[] patterns) { + public void setPatterns(String... patterns) { this.patterns = patterns; } diff --git a/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/AnnotationBeanConfigurerAspect.aj b/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/AnnotationBeanConfigurerAspect.aj index 81635ccd0e8..ad6da1b834c 100644 --- a/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/AnnotationBeanConfigurerAspect.aj +++ b/spring-aspects/src/main/java/org/springframework/beans/factory/aspectj/AnnotationBeanConfigurerAspect.aj @@ -51,8 +51,8 @@ public aspect AnnotationBeanConfigurerAspect extends AbstractInterfaceDrivenDepe public void setBeanFactory(BeanFactory beanFactory) { - this.beanConfigurerSupport.setBeanFactory(beanFactory); this.beanConfigurerSupport.setBeanWiringInfoResolver(new AnnotationBeanWiringInfoResolver()); + this.beanConfigurerSupport.setBeanFactory(beanFactory); } public void afterPropertiesSet() throws Exception { diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java index 29bf3f096c3..eb3f67ce6b6 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -93,7 +93,7 @@ public class ConfigurableMimeFileTypeMap extends FileTypeMap implements Initiali * Java Activation Framework, for example:
* {@code text/html html htm HTML HTM} */ - public void setMappings(String[] mappings) { + public void setMappings(String... mappings) { this.mappings = mappings; } diff --git a/spring-context/src/main/java/org/springframework/cache/annotation/SpringCacheAnnotationParser.java b/spring-context/src/main/java/org/springframework/cache/annotation/SpringCacheAnnotationParser.java index 100c380d34b..2822d1124d3 100644 --- a/spring-context/src/main/java/org/springframework/cache/annotation/SpringCacheAnnotationParser.java +++ b/spring-context/src/main/java/org/springframework/cache/annotation/SpringCacheAnnotationParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -55,24 +55,25 @@ public class SpringCacheAnnotationParser implements CacheAnnotationParser, Seria Collection evicts = getAnnotations(ae, CacheEvict.class); if (evicts != null) { ops = lazyInit(ops); - for (CacheEvict e : evicts) { - ops.add(parseEvictAnnotation(ae, e)); + for (CacheEvict evict : evicts) { + ops.add(parseEvictAnnotation(ae, evict)); } } - Collection updates = getAnnotations(ae, CachePut.class); - if (updates != null) { + Collection puts = getAnnotations(ae, CachePut.class); + if (puts != null) { ops = lazyInit(ops); - for (CachePut p : updates) { - ops.add(parseUpdateAnnotation(ae, p)); + for (CachePut put : puts) { + ops.add(parsePutAnnotation(ae, put)); } } - Collection caching = getAnnotations(ae, Caching.class); - if (caching != null) { + Collection cachings = getAnnotations(ae, Caching.class); + if (cachings != null) { ops = lazyInit(ops); - for (Caching c : caching) { - ops.addAll(parseCachingAnnotation(ae, c)); + for (Caching caching : cachings) { + ops.addAll(parseCachingAnnotation(ae, caching)); } } + return ops; } @@ -81,34 +82,34 @@ public class SpringCacheAnnotationParser implements CacheAnnotationParser, Seria } CacheableOperation parseCacheableAnnotation(AnnotatedElement ae, Cacheable caching) { - CacheableOperation cuo = new CacheableOperation(); - cuo.setCacheNames(caching.value()); - cuo.setCondition(caching.condition()); - cuo.setUnless(caching.unless()); - cuo.setKey(caching.key()); - cuo.setName(ae.toString()); - return cuo; + CacheableOperation op = new CacheableOperation(); + op.setCacheNames(caching.value()); + op.setCondition(caching.condition()); + op.setUnless(caching.unless()); + op.setKey(caching.key()); + op.setName(ae.toString()); + return op; } CacheEvictOperation parseEvictAnnotation(AnnotatedElement ae, CacheEvict caching) { - CacheEvictOperation ceo = new CacheEvictOperation(); - ceo.setCacheNames(caching.value()); - ceo.setCondition(caching.condition()); - ceo.setKey(caching.key()); - ceo.setCacheWide(caching.allEntries()); - ceo.setBeforeInvocation(caching.beforeInvocation()); - ceo.setName(ae.toString()); - return ceo; + CacheEvictOperation op = new CacheEvictOperation(); + op.setCacheNames(caching.value()); + op.setCondition(caching.condition()); + op.setKey(caching.key()); + op.setCacheWide(caching.allEntries()); + op.setBeforeInvocation(caching.beforeInvocation()); + op.setName(ae.toString()); + return op; } - CacheOperation parseUpdateAnnotation(AnnotatedElement ae, CachePut caching) { - CachePutOperation cuo = new CachePutOperation(); - cuo.setCacheNames(caching.value()); - cuo.setCondition(caching.condition()); - cuo.setUnless(caching.unless()); - cuo.setKey(caching.key()); - cuo.setName(ae.toString()); - return cuo; + CacheOperation parsePutAnnotation(AnnotatedElement ae, CachePut caching) { + CachePutOperation op = new CachePutOperation(); + op.setCacheNames(caching.value()); + op.setCondition(caching.condition()); + op.setUnless(caching.unless()); + op.setKey(caching.key()); + op.setName(ae.toString()); + return op; } Collection parseCachingAnnotation(AnnotatedElement ae, Caching caching) { @@ -132,7 +133,7 @@ public class SpringCacheAnnotationParser implements CacheAnnotationParser, Seria if (!ObjectUtils.isEmpty(updates)) { ops = lazyInit(ops); for (CachePut update : updates) { - ops.add(parseUpdateAnnotation(ae, update)); + ops.add(parsePutAnnotation(ae, update)); } } diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperation.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperation.java index bff9ff175cf..3760d6f0e55 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperation.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -26,32 +26,32 @@ import org.springframework.util.Assert; * Base class for cache operations. * * @author Costin Leau + * @since 3.1 */ public abstract class CacheOperation { - private Set cacheNames = Collections.emptySet(); + private String name = ""; - private String condition = ""; + private Set cacheNames = Collections.emptySet(); private String key = ""; - private String name = ""; + private String keyGenerator = ""; + private String cacheManager = ""; - public Set getCacheNames() { - return cacheNames; - } + private String cacheResolver = ""; - public String getCondition() { - return condition; - } + private String condition = ""; - public String getKey() { - return key; + + public void setName(String name) { + Assert.hasText(name); + this.name = name; } public String getName() { - return name; + return this.name; } public void setCacheName(String cacheName) { @@ -59,17 +59,16 @@ public abstract class CacheOperation { this.cacheNames = Collections.singleton(cacheName); } - public void setCacheNames(String[] cacheNames) { - Assert.notEmpty(cacheNames); + public void setCacheNames(String... cacheNames) { this.cacheNames = new LinkedHashSet(cacheNames.length); - for (String string : cacheNames) { - this.cacheNames.add(string); + for (String cacheName : cacheNames) { + Assert.hasText(cacheName, "Cache name must be non-null if specified"); + this.cacheNames.add(cacheName); } } - public void setCondition(String condition) { - Assert.notNull(condition); - this.condition = condition; + public Set getCacheNames() { + return this.cacheNames; } public void setKey(String key) { @@ -77,11 +76,47 @@ public abstract class CacheOperation { this.key = key; } - public void setName(String name) { - Assert.hasText(name); - this.name = name; + public String getKey() { + return this.key; } + public void setKeyGenerator(String keyGenerator) { + Assert.notNull(keyGenerator); + this.keyGenerator = keyGenerator; + } + + public String getKeyGenerator() { + return this.keyGenerator; + } + + public void setCacheManager(String cacheManager) { + Assert.notNull(cacheManager); + this.cacheManager = cacheManager; + } + + public String getCacheManager() { + return this.cacheManager; + } + + public void setCacheResolver(String cacheResolver) { + Assert.notNull(cacheManager); + this.cacheResolver = cacheResolver; + } + + public String getCacheResolver() { + return this.cacheResolver; + } + + public void setCondition(String condition) { + Assert.notNull(condition); + this.condition = condition; + } + + public String getCondition() { + return this.condition; + } + + /** * This implementation compares the {@code toString()} results. * @see #toString() @@ -116,17 +151,15 @@ public abstract class CacheOperation { *

Available to subclasses, for inclusion in their {@code toString()} result. */ protected StringBuilder getOperationDescription() { - StringBuilder result = new StringBuilder(); - result.append(getClass().getSimpleName()); - result.append("["); - result.append(this.name); - result.append("] caches="); - result.append(this.cacheNames); - result.append(" | key='"); - result.append(this.key); - result.append("' | condition='"); - result.append(this.condition); - result.append("'"); + StringBuilder result = new StringBuilder(getClass().getSimpleName()); + result.append("[").append(this.name); + result.append("] caches=").append(this.cacheNames); + result.append(" | key='").append(this.key); + result.append("' | keyGenerator='").append(this.keyGenerator); + result.append("' | cacheManager='").append(this.cacheManager); + result.append("' | cacheResolver='").append(this.cacheResolver); + result.append("' | condition='").append(this.condition).append("'"); return result; } + } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java index 0c53a93b9ec..e766e248802 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java @@ -167,7 +167,7 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo * Set the name-matching patterns for determining autowire candidates. * @param autowireCandidatePatterns the patterns to match against */ - public void setAutowireCandidatePatterns(String[] autowireCandidatePatterns) { + public void setAutowireCandidatePatterns(String... autowireCandidatePatterns) { this.autowireCandidatePatterns = autowireCandidatePatterns; } @@ -224,7 +224,7 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry); } - return this.registry.getBeanDefinitionCount() - beanCountAtScanStart; + return (this.registry.getBeanDefinitionCount() - beanCountAtScanStart); } /** diff --git a/spring-context/src/main/java/org/springframework/jmx/export/assembler/MethodExclusionMBeanInfoAssembler.java b/spring-context/src/main/java/org/springframework/jmx/export/assembler/MethodExclusionMBeanInfoAssembler.java index 33084bf17d2..75178da1281 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/assembler/MethodExclusionMBeanInfoAssembler.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/assembler/MethodExclusionMBeanInfoAssembler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -68,7 +68,7 @@ public class MethodExclusionMBeanInfoAssembler extends AbstractConfigurableMBean * that bean is found in the {@code ignoredMethodsMappings} property. * @see #setIgnoredMethodMappings(java.util.Properties) */ - public void setIgnoredMethods(String[] ignoredMethodNames) { + public void setIgnoredMethods(String... ignoredMethodNames) { this.ignoredMethods = new HashSet(Arrays.asList(ignoredMethodNames)); } diff --git a/spring-context/src/main/java/org/springframework/jmx/export/metadata/ManagedNotification.java b/spring-context/src/main/java/org/springframework/jmx/export/metadata/ManagedNotification.java index d60e66363af..78be5f5546e 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/metadata/ManagedNotification.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/metadata/ManagedNotification.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2014 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. @@ -44,7 +44,7 @@ public class ManagedNotification { /** * Set a list of notification types. */ - public void setNotificationTypes(String[] notificationTypes) { + public void setNotificationTypes(String... notificationTypes) { this.notificationTypes = notificationTypes; } diff --git a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java index 1ced696bc96..650164768d2 100644 --- a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java +++ b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -21,7 +21,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; - import javax.naming.NameNotFoundException; import javax.naming.NamingException; @@ -75,23 +74,23 @@ public class SimpleJndiBeanFactory extends JndiLocatorSupport implements BeanFac /** - * Set a list of names of shareable JNDI resources, + * Add the name of a shareable JNDI resource, * which this factory is allowed to cache once obtained. - * @param shareableResources the JNDI names + * @param shareableResource the JNDI name * (typically within the "java:comp/env/" namespace) */ - public void setShareableResources(String[] shareableResources) { - this.shareableResources.addAll(Arrays.asList(shareableResources)); + public void addShareableResource(String shareableResource) { + this.shareableResources.add(shareableResource); } /** - * Add the name of a shareable JNDI resource, + * Set a list of names of shareable JNDI resources, * which this factory is allowed to cache once obtained. - * @param shareableResource the JNDI name + * @param shareableResources the JNDI names * (typically within the "java:comp/env/" namespace) */ - public void addShareableResource(String shareableResource) { - this.shareableResources.add(shareableResource); + public void setShareableResources(String... shareableResources) { + this.shareableResources.addAll(Arrays.asList(shareableResources)); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java index 95ae0d9c191..8b2599ed059 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java @@ -130,7 +130,7 @@ public class PreparedStatementCreatorFactory { /** * Set the column names of the auto-generated keys. */ - public void setGeneratedKeysColumnNames(String[] names) { + public void setGeneratedKeysColumnNames(String... names) { this.generatedKeysColumnNames = names; } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java index 380de1d90af..f3391db2394 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2014 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. @@ -22,7 +22,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; - import javax.sql.DataSource; import org.apache.commons.logging.Log; @@ -292,7 +291,7 @@ public class TableMetaDataContext { * Build the insert string based on configuration and metadata information * @return the insert string to be used */ - public String createInsertString(String[] generatedKeyNames) { + public String createInsertString(String... generatedKeyNames) { HashSet keys = new HashSet(generatedKeyNames.length); for (String key : generatedKeyNames) { keys.add(key.toUpperCase()); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java index 8d4ecd2e7b8..ce343332cea 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/AbstractJdbcInsert.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -180,26 +180,26 @@ public abstract class AbstractJdbcInsert { } /** - * Get the names of any generated keys + * Specify the name of a single generated key column */ - public String[] getGeneratedKeyNames() { - return this.generatedKeyNames; + public void setGeneratedKeyName(String generatedKeyName) { + checkIfConfigurationModificationIsAllowed(); + this.generatedKeyNames = new String[] {generatedKeyName}; } /** * Set the names of any generated keys */ - public void setGeneratedKeyNames(String[] generatedKeyNames) { + public void setGeneratedKeyNames(String... generatedKeyNames) { checkIfConfigurationModificationIsAllowed(); this.generatedKeyNames = generatedKeyNames; } /** - * Specify the name of a single generated key column + * Get the names of any generated keys */ - public void setGeneratedKeyName(String generatedKeyName) { - checkIfConfigurationModificationIsAllowed(); - this.generatedKeyNames = new String[] {generatedKeyName}; + public String[] getGeneratedKeyNames() { + return this.generatedKeyNames; } /** diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/object/RdbmsOperation.java b/spring-jdbc/src/main/java/org/springframework/jdbc/object/RdbmsOperation.java index 337e4d6137a..61c52338942 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/object/RdbmsOperation.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/object/RdbmsOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -210,7 +210,7 @@ public abstract class RdbmsOperation implements InitializingBean { * Set the column names of the auto-generated keys. * @see java.sql.Connection#prepareStatement(String, String[]) */ - public void setGeneratedKeysColumnNames(String[] names) { + public void setGeneratedKeysColumnNames(String... names) { if (isCompiled()) { throw new InvalidDataAccessApiUsageException( "The column names for the generated keys must be set before the operation is compiled"); diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java index fe6aed68281..d1a8d548c43 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java @@ -230,7 +230,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi *

Setting either this property, {@link #setContextPath "contextPath"} * or {@link #setClassesToBeBound "classesToBeBound"} is required. */ - public void setPackagesToScan(String[] packagesToScan) { + public void setPackagesToScan(String... packagesToScan) { this.packagesToScan = packagesToScan; } diff --git a/spring-test/src/main/java/org/springframework/test/context/ContextConfigurationAttributes.java b/spring-test/src/main/java/org/springframework/test/context/ContextConfigurationAttributes.java index 16569e5aea7..cf8665897b5 100644 --- a/spring-test/src/main/java/org/springframework/test/context/ContextConfigurationAttributes.java +++ b/spring-test/src/main/java/org/springframework/test/context/ContextConfigurationAttributes.java @@ -20,6 +20,7 @@ import java.util.Arrays; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.annotation.AnnotationAttributes; @@ -44,13 +45,11 @@ public class ContextConfigurationAttributes { private final Class declaringClass; - private String[] locations; - private Class[] classes; - private final boolean inheritLocations; + private String[] locations; - private final Class contextLoaderClass; + private final boolean inheritLocations; private final Class>[] initializers; @@ -58,42 +57,8 @@ public class ContextConfigurationAttributes { private final String name; + private final Class contextLoaderClass; - /** - * Resolve resource locations from the {@link ContextConfiguration#locations() locations} - * and {@link ContextConfiguration#value() value} attributes of the supplied - * {@link ContextConfiguration} annotation. - * - * @throws IllegalStateException if both the locations and value attributes have been declared - */ - private static String[] resolveLocations(Class declaringClass, ContextConfiguration contextConfiguration) { - return resolveLocations(declaringClass, contextConfiguration.locations(), contextConfiguration.value()); - } - - /** - * Resolve resource locations from the supplied {@code locations} and - * {@code value} arrays, which correspond to attributes of the same names in - * the {@link ContextConfiguration} annotation. - * - * @throws IllegalStateException if both the locations and value attributes have been declared - */ - private static String[] resolveLocations(Class declaringClass, String[] locations, String[] value) { - Assert.notNull(declaringClass, "declaringClass must not be null"); - - if (!ObjectUtils.isEmpty(value) && !ObjectUtils.isEmpty(locations)) { - String msg = String.format("Test class [%s] has been configured with @ContextConfiguration's 'value' %s " - + "and 'locations' %s attributes. Only one declaration of resource " - + "locations is permitted per @ContextConfiguration annotation.", declaringClass.getName(), - ObjectUtils.nullSafeToString(value), ObjectUtils.nullSafeToString(locations)); - logger.error(msg); - throw new IllegalStateException(msg); - } - else if (!ObjectUtils.isEmpty(value)) { - locations = value; - } - - return locations; - } /** * Construct a new {@link ContextConfigurationAttributes} instance for the @@ -118,11 +83,9 @@ public class ContextConfigurationAttributes { */ @SuppressWarnings("unchecked") public ContextConfigurationAttributes(Class declaringClass, AnnotationAttributes annAttrs) { - this( - declaringClass, + this(declaringClass, resolveLocations(declaringClass, annAttrs.getStringArray("locations"), annAttrs.getStringArray("value")), - annAttrs.getClassArray("classes"), - annAttrs.getBoolean("inheritLocations"), + annAttrs.getClassArray("classes"), annAttrs.getBoolean("inheritLocations"), (Class>[]) annAttrs.getClassArray("initializers"), annAttrs.getBoolean("inheritInitializers"), annAttrs.getString("name"), (Class) annAttrs.getClass("loader")); @@ -133,7 +96,6 @@ public class ContextConfigurationAttributes { * {@linkplain Class test class} that declared the * {@link ContextConfiguration @ContextConfiguration} annotation and its * corresponding attributes. - * * @param declaringClass the test class that declared {@code @ContextConfiguration} * @param locations the resource locations declared via {@code @ContextConfiguration} * @param classes the annotated classes declared via {@code @ContextConfiguration} @@ -148,6 +110,7 @@ public class ContextConfigurationAttributes { @Deprecated public ContextConfigurationAttributes(Class declaringClass, String[] locations, Class[] classes, boolean inheritLocations, Class contextLoaderClass) { + this(declaringClass, locations, classes, inheritLocations, null, true, null, contextLoaderClass); } @@ -156,7 +119,6 @@ public class ContextConfigurationAttributes { * {@linkplain Class test class} that declared the * {@link ContextConfiguration @ContextConfiguration} annotation and its * corresponding attributes. - * * @param declaringClass the test class that declared {@code @ContextConfiguration} * @param locations the resource locations declared via {@code @ContextConfiguration} * @param classes the annotated classes declared via {@code @ContextConfiguration} @@ -167,10 +129,11 @@ public class ContextConfigurationAttributes { * @throws IllegalArgumentException if the {@code declaringClass} or {@code contextLoaderClass} is * {@code null} */ - public ContextConfigurationAttributes(Class declaringClass, String[] locations, Class[] classes, - boolean inheritLocations, + public ContextConfigurationAttributes( + Class declaringClass, String[] locations, Class[] classes, boolean inheritLocations, Class>[] initializers, boolean inheritInitializers, Class contextLoaderClass) { + this(declaringClass, locations, classes, inheritLocations, initializers, inheritInitializers, null, contextLoaderClass); } @@ -180,7 +143,6 @@ public class ContextConfigurationAttributes { * {@linkplain Class test class} that declared the * {@link ContextConfiguration @ContextConfiguration} annotation and its * corresponding attributes. - * * @param declaringClass the test class that declared {@code @ContextConfiguration} * @param locations the resource locations declared via {@code @ContextConfiguration} * @param classes the annotated classes declared via {@code @ContextConfiguration} @@ -192,8 +154,8 @@ public class ContextConfigurationAttributes { * @throws IllegalArgumentException if the {@code declaringClass} or {@code contextLoaderClass} is * {@code null} */ - public ContextConfigurationAttributes(Class declaringClass, String[] locations, Class[] classes, - boolean inheritLocations, + public ContextConfigurationAttributes( + Class declaringClass, String[] locations, Class[] classes, boolean inheritLocations, Class>[] initializers, boolean inheritInitializers, String name, Class contextLoaderClass) { @@ -202,9 +164,9 @@ public class ContextConfigurationAttributes { if (!ObjectUtils.isEmpty(locations) && !ObjectUtils.isEmpty(classes) && logger.isDebugEnabled()) { logger.debug(String.format( - "Test class [%s] has been configured with @ContextConfiguration's 'locations' (or 'value') %s " - + "and 'classes' %s attributes. Most SmartContextLoader implementations support " - + "only one declaration of resources per @ContextConfiguration annotation.", + "Test class [%s] has been configured with @ContextConfiguration's 'locations' (or 'value') %s " + + "and 'classes' %s attributes. Most SmartContextLoader implementations support " + + "only one declaration of resources per @ContextConfiguration annotation.", declaringClass.getName(), ObjectUtils.nullSafeToString(locations), ObjectUtils.nullSafeToString(classes))); } @@ -215,77 +177,112 @@ public class ContextConfigurationAttributes { this.inheritLocations = inheritLocations; this.initializers = initializers; this.inheritInitializers = inheritInitializers; - this.name = StringUtils.hasText(name) ? name : null; + this.name = (StringUtils.hasText(name) ? name : null); this.contextLoaderClass = contextLoaderClass; } + /** - * Get the {@linkplain Class class} that declared the - * {@link ContextConfiguration @ContextConfiguration} annotation. - * - * @return the declaring class; never {@code null} + * Resolve resource locations from the {@link ContextConfiguration#locations() locations} + * and {@link ContextConfiguration#value() value} attributes of the supplied + * {@link ContextConfiguration} annotation. + * @throws IllegalStateException if both the locations and value attributes have been declared */ - public Class getDeclaringClass() { - return declaringClass; + private static String[] resolveLocations(Class declaringClass, ContextConfiguration contextConfiguration) { + return resolveLocations(declaringClass, contextConfiguration.locations(), contextConfiguration.value()); } /** - * Get the resource locations that were declared via - * {@link ContextConfiguration @ContextConfiguration}. - * - *

Note: this is a mutable property. The returned value may therefore - * represent a processed value that does not match the original value - * declared via {@link ContextConfiguration @ContextConfiguration}. - * - * @return the resource locations; potentially {@code null} or empty - * @see ContextConfiguration#value - * @see ContextConfiguration#locations - * @see #setLocations(String[]) + * Resolve resource locations from the supplied {@code locations} and + * {@code value} arrays, which correspond to attributes of the same names in + * the {@link ContextConfiguration} annotation. + * @throws IllegalStateException if both the locations and value attributes have been declared */ - public String[] getLocations() { + private static String[] resolveLocations(Class declaringClass, String[] locations, String[] value) { + Assert.notNull(declaringClass, "declaringClass must not be null"); + if (!ObjectUtils.isEmpty(value) && !ObjectUtils.isEmpty(locations)) { + throw new IllegalStateException(String.format("Test class [%s] has been configured with " + + "@ContextConfiguration's 'value' %s and 'locations' %s attributes. Only one declaration " + + "of resource locations is permitted per @ContextConfiguration annotation.", + declaringClass.getName(), ObjectUtils.nullSafeToString(value), ObjectUtils.nullSafeToString(locations))); + } + else if (!ObjectUtils.isEmpty(value)) { + locations = value; + } return locations; } + /** - * Set the processed resource locations, effectively overriding the + * Get the {@linkplain Class class} that declared the + * {@link ContextConfiguration @ContextConfiguration} annotation. + * @return the declaring class (never {@code null}) + */ + public Class getDeclaringClass() { + return this.declaringClass; + } + + /** + * Set the processed annotated classes, effectively overriding the * original value declared via {@link ContextConfiguration @ContextConfiguration}. - * - * @see #getLocations() + * @see #getClasses() */ - public void setLocations(String[] locations) { - this.locations = locations; + public void setClasses(Class... classes) { + this.classes = classes; } /** * Get the annotated classes that were declared via * {@link ContextConfiguration @ContextConfiguration}. - * *

Note: this is a mutable property. The returned value may therefore * represent a processed value that does not match the original value * declared via {@link ContextConfiguration @ContextConfiguration}. - * * @return the annotated classes; potentially {@code null} or empty * @see ContextConfiguration#classes * @see #setClasses(Class[]) */ public Class[] getClasses() { - return classes; + return this.classes; } /** - * Set the processed annotated classes, effectively overriding the + * Determine if this {@code ContextConfigurationAttributes} instance has + * class-based resources. + * @return {@code true} if the {@link #getClasses() classes} array is not empty + * @see #hasResources() + * @see #hasLocations() + */ + public boolean hasClasses() { + return !ObjectUtils.isEmpty(getClasses()); + } + + /** + * Set the processed resource locations, effectively overriding the * original value declared via {@link ContextConfiguration @ContextConfiguration}. - * - * @see #getClasses() + * @see #getLocations() */ - public void setClasses(Class[] classes) { - this.classes = classes; + public void setLocations(String... locations) { + this.locations = locations; + } + + /** + * Get the resource locations that were declared via + * {@link ContextConfiguration @ContextConfiguration}. + *

Note: this is a mutable property. The returned value may therefore + * represent a processed value that does not match the original value + * declared via {@link ContextConfiguration @ContextConfiguration}. + * @return the resource locations; potentially {@code null} or empty + * @see ContextConfiguration#value + * @see ContextConfiguration#locations + * @see #setLocations(String[]) + */ + public String[] getLocations() { + return this.locations; } /** * Determine if this {@code ContextConfigurationAttributes} instance has * path-based resource locations. - * * @return {@code true} if the {@link #getLocations() locations} array is not empty * @see #hasResources() * @see #hasClasses() @@ -294,79 +291,51 @@ public class ContextConfigurationAttributes { return !ObjectUtils.isEmpty(getLocations()); } - /** - * Determine if this {@code ContextConfigurationAttributes} instance has - * class-based resources. - * - * @return {@code true} if the {@link #getClasses() classes} array is not empty - * @see #hasResources() - * @see #hasLocations() - */ - public boolean hasClasses() { - return !ObjectUtils.isEmpty(getClasses()); - } - /** * Determine if this {@code ContextConfigurationAttributes} instance has * either path-based resource locations or class-based resources. - * * @return {@code true} if either the {@link #getLocations() locations} * or the {@link #getClasses() classes} array is not empty * @see #hasLocations() * @see #hasClasses() */ public boolean hasResources() { - return hasLocations() || hasClasses(); + return (hasLocations() || hasClasses()); } /** * Get the {@code inheritLocations} flag that was declared via * {@link ContextConfiguration @ContextConfiguration}. - * * @return the {@code inheritLocations} flag * @see ContextConfiguration#inheritLocations */ public boolean isInheritLocations() { - return inheritLocations; + return this.inheritLocations; } /** * Get the {@code ApplicationContextInitializer} classes that were declared via * {@link ContextConfiguration @ContextConfiguration}. - * * @return the {@code ApplicationContextInitializer} classes * @since 3.2 */ public Class>[] getInitializers() { - return initializers; + return this.initializers; } /** * Get the {@code inheritInitializers} flag that was declared via * {@link ContextConfiguration @ContextConfiguration}. - * * @return the {@code inheritInitializers} flag * @since 3.2 */ public boolean isInheritInitializers() { - return inheritInitializers; - } - - /** - * Get the {@code ContextLoader} class that was declared via - * {@link ContextConfiguration @ContextConfiguration}. - * - * @return the {@code ContextLoader} class - * @see ContextConfiguration#loader - */ - public Class getContextLoaderClass() { - return contextLoaderClass; + return this.inheritInitializers; } /** * Get the name of the context hierarchy level that was declared via * {@link ContextConfiguration @ContextConfiguration}. - * * @return the name of the context hierarchy level or {@code null} if not applicable * @see ContextConfiguration#name() * @since 3.2.2 @@ -376,24 +345,16 @@ public class ContextConfigurationAttributes { } /** - * Generate a unique hash code for all properties of this - * {@code ContextConfigurationAttributes} instance excluding the - * {@linkplain #getName() name}. + * Get the {@code ContextLoader} class that was declared via + * {@link ContextConfiguration @ContextConfiguration}. + * @return the {@code ContextLoader} class + * @see ContextConfiguration#loader */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + declaringClass.hashCode(); - result = prime * result + Arrays.hashCode(locations); - result = prime * result + Arrays.hashCode(classes); - result = prime * result + (inheritLocations ? 1231 : 1237); - result = prime * result + Arrays.hashCode(initializers); - result = prime * result + (inheritInitializers ? 1231 : 1237); - result = prime * result + contextLoaderClass.hashCode(); - return result; + public Class getContextLoaderClass() { + return this.contextLoaderClass; } + /** * Determine if the supplied object is equal to this * {@code ContextConfigurationAttributes} instance by comparing both object's @@ -406,56 +367,36 @@ public class ContextConfigurationAttributes { * {@link #getContextLoaderClass() ContextLoader class}. */ @Override - public boolean equals(Object obj) { - - if (this == obj) { + public boolean equals(Object other) { + if (this == other) { return true; } - if (!(obj instanceof ContextConfigurationAttributes)) { - return false; - } - - final ContextConfigurationAttributes that = (ContextConfigurationAttributes) obj; - - if (this.declaringClass == null) { - if (that.declaringClass != null) { - return false; - } - } - else if (!this.declaringClass.equals(that.declaringClass)) { - return false; - } - - if (!Arrays.equals(this.locations, that.locations)) { - return false; - } - - if (!Arrays.equals(this.classes, that.classes)) { - return false; - } - - if (this.inheritLocations != that.inheritLocations) { - return false; - } - - if (!Arrays.equals(this.initializers, that.initializers)) { - return false; - } - - if (this.inheritInitializers != that.inheritInitializers) { - return false; - } - - if (this.contextLoaderClass == null) { - if (that.contextLoaderClass != null) { - return false; - } - } - else if (!this.contextLoaderClass.equals(that.contextLoaderClass)) { + if (!(other instanceof ContextConfigurationAttributes)) { return false; } + ContextConfigurationAttributes otherAttr = (ContextConfigurationAttributes) other; + return (ObjectUtils.nullSafeEquals(this.declaringClass, otherAttr.declaringClass) && + Arrays.equals(this.classes, otherAttr.classes)) && + Arrays.equals(this.locations, otherAttr.locations) && + this.inheritLocations == otherAttr.inheritLocations && + Arrays.equals(this.initializers, otherAttr.initializers) && + this.inheritInitializers == otherAttr.inheritInitializers && + ObjectUtils.nullSafeEquals(this.name, otherAttr.name) && + ObjectUtils.nullSafeEquals(this.contextLoaderClass, otherAttr.contextLoaderClass); + } - return true; + /** + * Generate a unique hash code for all properties of this + * {@code ContextConfigurationAttributes} instance excluding the + * {@linkplain #getName() name}. + */ + @Override + public int hashCode() { + int result = this.declaringClass.hashCode(); + result = 31 * result + Arrays.hashCode(this.classes); + result = 31 * result + Arrays.hashCode(this.locations); + result = 31 * result + Arrays.hashCode(this.initializers); + return result; } /** @@ -464,16 +405,16 @@ public class ContextConfigurationAttributes { */ @Override public String toString() { - return new ToStringCreator(this)// - .append("declaringClass", declaringClass.getName())// - .append("locations", ObjectUtils.nullSafeToString(locations))// - .append("classes", ObjectUtils.nullSafeToString(classes))// - .append("inheritLocations", inheritLocations)// - .append("initializers", ObjectUtils.nullSafeToString(initializers))// - .append("inheritInitializers", inheritInitializers)// - .append("name", name)// - .append("contextLoaderClass", contextLoaderClass.getName())// - .toString(); + return new ToStringCreator(this) + .append("declaringClass", this.declaringClass.getName()) + .append("classes", ObjectUtils.nullSafeToString(this.classes)) + .append("locations", ObjectUtils.nullSafeToString(this.locations)) + .append("inheritLocations", this.inheritLocations) + .append("initializers", ObjectUtils.nullSafeToString(this.initializers)) + .append("inheritInitializers", this.inheritInitializers) + .append("name", this.name) + .append("contextLoaderClass", this.contextLoaderClass.getName()) + .toString(); } } diff --git a/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/handler/UserRoleAuthorizationInterceptor.java b/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/handler/UserRoleAuthorizationInterceptor.java index 57f4119b642..4e192c6529d 100644 --- a/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/handler/UserRoleAuthorizationInterceptor.java +++ b/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/handler/UserRoleAuthorizationInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2014 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. @@ -17,7 +17,6 @@ package org.springframework.web.portlet.handler; import java.io.IOException; - import javax.portlet.PortletException; import javax.portlet.PortletRequest; import javax.portlet.PortletResponse; @@ -41,7 +40,7 @@ public class UserRoleAuthorizationInterceptor extends HandlerInterceptorAdapter * Set the roles that this interceptor should treat as authorized. * @param authorizedRoles array of role names */ - public final void setAuthorizedRoles(String[] authorizedRoles) { + public final void setAuthorizedRoles(String... authorizedRoles) { this.authorizedRoles = authorizedRoles; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java index 050d7d7927b..f8df232acb8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/UserRoleAuthorizationInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2014 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. @@ -38,7 +38,7 @@ public class UserRoleAuthorizationInterceptor extends HandlerInterceptorAdapter * Set the roles that this interceptor should treat as authorized. * @param authorizedRoles array of role names */ - public final void setAuthorizedRoles(String[] authorizedRoles) { + public final void setAuthorizedRoles(String... authorizedRoles) { this.authorizedRoles = authorizedRoles; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/multiaction/ParameterMethodNameResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/multiaction/ParameterMethodNameResolver.java index 83a65d086f1..347815c5fdc 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/multiaction/ParameterMethodNameResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/multiaction/ParameterMethodNameResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -124,7 +124,7 @@ public class ParameterMethodNameResolver implements MethodNameResolver { * can be considered a logical name only. * @see #setParamName */ - public void setMethodParamNames(String[] methodParamNames) { + public void setMethodParamNames(String... methodParamNames) { this.methodParamNames = methodParamNames; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/AbstractControllerUrlHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/AbstractControllerUrlHandlerMapping.java index e6bbfd2ccf9..7893bc59542 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/AbstractControllerUrlHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/AbstractControllerUrlHandlerMapping.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -60,7 +60,7 @@ public abstract class AbstractControllerUrlHandlerMapping extends AbstractDetect * e.g. a {@link org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping}, * alongside this ControllerClassNameHandlerMapping for application controllers. */ - public void setExcludedPackages(String[] excludedPackages) { + public void setExcludedPackages(String... excludedPackages) { this.excludedPackages = (excludedPackages != null) ? new HashSet(Arrays.asList(excludedPackages)) : new HashSet(); } @@ -69,7 +69,7 @@ public abstract class AbstractControllerUrlHandlerMapping extends AbstractDetect * Specify controller classes that should be excluded from this mapping. * Any such classes will simply be ignored by this HandlerMapping. */ - public void setExcludedClasses(Class[] excludedClasses) { + public void setExcludedClasses(Class... excludedClasses) { this.excludedClasses = (excludedClasses != null) ? new HashSet>(Arrays.asList(excludedClasses)) : new HashSet>(); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java index 7b67dc163a3..087bcc0f855 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -120,7 +120,7 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport { *

Default is GET, HEAD and POST for simple form controller types; * unrestricted for general controllers and interceptors. */ - public final void setSupportedMethods(String[] methods) { + public final void setSupportedMethods(String... methods) { if (methods != null) { this.supportedMethods = new HashSet(Arrays.asList(methods)); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java index 6020f58da01..cf54d3d6773 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java @@ -227,7 +227,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement } /** - * Whether to add path variables in the model or not. + * Specify whether to add path variables to the model or not. *

Path variables are commonly bound to URI template variables through the {@code @PathVariable} * annotation. They're are effectively URI template variables with type conversion applied to * them to derive typed Object values. Such values are frequently needed in views for @@ -235,14 +235,14 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement *

Path variables added to the model override static attributes (see {@link #setAttributes(Properties)}) * but not attributes already present in the model. *

By default this flag is set to {@code true}. Concrete view types can override this. - * @param exposePathVariables {@code true} to expose path variables, and {@code false} otherwise. + * @param exposePathVariables {@code true} to expose path variables, and {@code false} otherwise */ public void setExposePathVariables(boolean exposePathVariables) { this.exposePathVariables = exposePathVariables; } /** - * Returns the value of the flag indicating whether path variables should be added to the model or not. + * Return whether to add path variables to the model or not. */ public boolean isExposePathVariables() { return this.exposePathVariables; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java index 580536ca539..7139a74ea4e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceView.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -141,7 +141,7 @@ public class InternalResourceView extends AbstractUrlBasedView { * the {@link #setExposeContextBeansAsAttributes "exposeContextBeansAsAttributes"} * flag on but do not list specific bean names for this property. */ - public void setExposedContextBeanNames(String[] exposedContextBeanNames) { + public void setExposedContextBeanNames(String... exposedContextBeanNames) { this.exposedContextBeanNames = new HashSet(Arrays.asList(exposedContextBeanNames)); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java index b25ba680a53..e1866649a72 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/InternalResourceViewResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -70,6 +70,7 @@ public class InternalResourceViewResolver extends UrlBasedViewResolver { setViewClass(viewClass); } + /** * This resolver requires {@link InternalResourceView}. */ @@ -78,7 +79,6 @@ public class InternalResourceViewResolver extends UrlBasedViewResolver { return InternalResourceView.class; } - /** * Specify whether to always include the view rather than forward to it. *

Default is "false". Switch this flag on to enforce the use of a @@ -86,7 +86,7 @@ public class InternalResourceViewResolver extends UrlBasedViewResolver { * @see InternalResourceView#setAlwaysInclude */ public void setAlwaysInclude(boolean alwaysInclude) { - this.alwaysInclude = Boolean.valueOf(alwaysInclude); + this.alwaysInclude = alwaysInclude; } /** @@ -108,7 +108,7 @@ public class InternalResourceViewResolver extends UrlBasedViewResolver { * attributes. * @see InternalResourceView#setExposedContextBeanNames */ - public void setExposedContextBeanNames(String[] exposedContextBeanNames) { + public void setExposedContextBeanNames(String... exposedContextBeanNames) { this.exposedContextBeanNames = exposedContextBeanNames; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ResourceBundleViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ResourceBundleViewResolver.java index a3b50574ff0..c4db9cc6c60 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ResourceBundleViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ResourceBundleViewResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -130,7 +130,7 @@ public class ResourceBundleViewResolver extends AbstractCachingViewResolver * @see #setBasename * @see java.util.ResourceBundle#getBundle(String) */ - public void setBasenames(String[] basenames) { + public void setBasenames(String... basenames) { this.basenames = basenames; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java index edb4a02be86..fa2dda373db 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/UrlBasedViewResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -106,8 +106,6 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements private String suffix = ""; - private String[] viewNames = null; - private String contentType; private boolean redirectContextRelative = true; @@ -116,13 +114,16 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements private String requestContextAttribute; - private int order = Integer.MAX_VALUE; - /** Map of static attributes, keyed by attribute name (String) */ private final Map staticAttributes = new HashMap(); private Boolean exposePathVariables; + private String[] viewNames; + + private int order = Integer.MAX_VALUE; + + /** * Set the view class that should be used to create views. * @param viewClass class that is assignable to the required view class @@ -303,6 +304,29 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements return this.staticAttributes; } + /** + * Specify whether views resolved by this resolver should add path variables to the model or not. + *

>The default setting is to let each View decide (see {@link AbstractView#setExposePathVariables}. + * However, you can use this property to override that. + * @param exposePathVariables + *

    + *
  • {@code true} - all Views resolved by this resolver will expose path variables + *
  • {@code false} - no Views resolved by this resolver will expose path variables + *
  • {@code null} - individual Views can decide for themselves (this is used by the default) + *
      + * @see AbstractView#setExposePathVariables + */ + public void setExposePathVariables(Boolean exposePathVariables) { + this.exposePathVariables = exposePathVariables; + } + + /** + * Return whether views resolved by this resolver should add path variables to the model or not. + */ + protected Boolean getExposePathVariables() { + return this.exposePathVariables; + } + /** * Set the view names (or name patterns) that can be handled by this * {@link org.springframework.web.servlet.ViewResolver}. View names can contain @@ -310,7 +334,7 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements * view name 'myReport'. * @see #canHandle */ - public void setViewNames(String[] viewNames) { + public void setViewNames(String... viewNames) { this.viewNames = viewNames; } @@ -339,22 +363,6 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements return this.order; } - /** - * Whether views resolved by this resolver should add path variables the model or not. - * The default setting is to allow each View decide (see {@link AbstractView#setExposePathVariables(boolean)}. - * However, you can use this property to override that. - * @param exposePathVariables - *
        - *
      • {@code true} - all Views resolved by this resolver will expose path variables - *
      • {@code false} - no Views resolved by this resolver will expose path variables - *
      • {@code null} - individual Views can decide for themselves (this is used by the default) - *
          - * @see AbstractView#setExposePathVariables(boolean) - */ - public void setExposePathVariables(Boolean exposePathVariables) { - this.exposePathVariables = exposePathVariables; - } - @Override protected void initApplicationContext() { super.initApplicationContext(); @@ -363,6 +371,7 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements } } + /** * This implementation returns just the view name, * as this ViewResolver doesn't support localized resolution. @@ -460,15 +469,20 @@ public class UrlBasedViewResolver extends AbstractCachingViewResolver implements protected AbstractUrlBasedView buildView(String viewName) throws Exception { AbstractUrlBasedView view = (AbstractUrlBasedView) BeanUtils.instantiateClass(getViewClass()); view.setUrl(getPrefix() + viewName + getSuffix()); + String contentType = getContentType(); if (contentType != null) { view.setContentType(contentType); } + view.setRequestContextAttribute(getRequestContextAttribute()); view.setAttributesMap(getAttributesMap()); - if (this.exposePathVariables != null) { + + Boolean exposePathVariables = getExposePathVariables(); + if (exposePathVariables != null) { view.setExposePathVariables(exposePathVariables); } + return view; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/AbstractJasperReportsView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/AbstractJasperReportsView.java index 0c8a30a6040..1227717f78b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/AbstractJasperReportsView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/AbstractJasperReportsView.java @@ -228,7 +228,7 @@ public abstract class AbstractJasperReportsView extends AbstractUrlBasedView { * @see net.sf.jasperreports.engine.data.JRBeanCollectionDataSource * @see net.sf.jasperreports.engine.data.JRBeanArrayDataSource */ - public void setSubReportDataKeys(String[] subReportDataKeys) { + public void setSubReportDataKeys(String... subReportDataKeys) { this.subReportDataKeys = subReportDataKeys; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/JasperReportsViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/JasperReportsViewResolver.java index 9a7aab3a087..c55192c557a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/JasperReportsViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/jasperreports/JasperReportsViewResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -75,7 +75,7 @@ public class JasperReportsViewResolver extends UrlBasedViewResolver { * Set the {@code subReportDataKeys} the view class should use. * @see AbstractJasperReportsView#setSubReportDataKeys */ - public void setSubReportDataKeys(String[] subReportDataKeys) { + public void setSubReportDataKeys(String... subReportDataKeys) { this.subReportDataKeys = subReportDataKeys; }