Polishing

This commit is contained in:
Juergen Hoeller 2017-05-04 14:09:15 +02:00
parent 799589ec1c
commit 1332482c40
6 changed files with 46 additions and 36 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2017 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.
@ -42,7 +42,7 @@ public class Problem {
/**
* Create a new instance of the {@link Problem} class.
* @param message a message detailing the problem
* @param message a message detailing the problem
* @param location the location within a bean configuration source that triggered the error
*/
public Problem(String message, Location location) {
@ -51,7 +51,7 @@ public class Problem {
/**
* Create a new instance of the {@link Problem} class.
* @param message a message detailing the problem
* @param message a message detailing the problem
* @param parseState the {@link ParseState} at the time of the error
* @param location the location within a bean configuration source that triggered the error
*/
@ -61,8 +61,8 @@ public class Problem {
/**
* Create a new instance of the {@link Problem} class.
* @param message a message detailing the problem
* @param rootCause the underlying expection that caused the error (may be {@code null})
* @param message a message detailing the problem
* @param rootCause the underlying exception that caused the error (may be {@code null})
* @param parseState the {@link ParseState} at the time of the error
* @param location the location within a bean configuration source that triggered the error
*/
@ -107,7 +107,7 @@ public class Problem {
}
/**
* Get the underlying expection that caused the error (may be {@code null}).
* Get the underlying exception that caused the error (may be {@code null}).
*/
public Throwable getRootCause() {
return this.rootCause;

View File

@ -1295,8 +1295,8 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp
mbd.setScope(containingBd.getScope());
}
// Only cache the merged bean definition if we're already about to create an
// instance of the bean, or at least have already created an instance before.
// Cache the merged bean definition for the time being
// (it might still get re-merged later on in order to pick up metadata changes)
if (containingBd == null && isCacheBeanMetadata()) {
this.mergedBeanDefinitions.put(beanName, mbd);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2017 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.
@ -81,7 +81,9 @@ public class ResourceEditor extends PropertyEditorSupport {
* @param ignoreUnresolvablePlaceholders whether to ignore unresolvable placeholders
* if no corresponding property could be found in the given {@code propertyResolver}
*/
public ResourceEditor(ResourceLoader resourceLoader, PropertyResolver propertyResolver, boolean ignoreUnresolvablePlaceholders) {
public ResourceEditor(ResourceLoader resourceLoader, PropertyResolver propertyResolver,
boolean ignoreUnresolvablePlaceholders) {
Assert.notNull(resourceLoader, "ResourceLoader must not be null");
this.resourceLoader = resourceLoader;
this.propertyResolver = propertyResolver;

View File

@ -54,6 +54,7 @@ import static org.springframework.core.annotation.AnnotationUtils.*;
* @author Sam Brannen
* @author Chris Beams
* @author Phillip Webb
* @author Oleg Zhurakousky
*/
public class AnnotationUtilsTests {
@ -90,7 +91,7 @@ public class AnnotationUtilsTests {
assertNotNull(findAnnotation(m, Order.class));
}
/** @since 4.2 */
// @since 4.2
@Test
public void findMethodAnnotationWithAnnotationOnMethodInInterface() throws Exception {
Method m = Leaf.class.getMethod("fromInterfaceImplementedByRoot");
@ -102,7 +103,7 @@ public class AnnotationUtilsTests {
assertNotNull(findAnnotation(m, Order.class));
}
/** @since 4.2 */
// @since 4.2
@Test
public void findMethodAnnotationWithMetaAnnotationOnLeaf() throws Exception {
Method m = Leaf.class.getMethod("metaAnnotatedOnLeaf");
@ -111,7 +112,7 @@ public class AnnotationUtilsTests {
assertNotNull(findAnnotation(m, Order.class));
}
/** @since 4.2 */
// @since 4.2
@Test
public void findMethodAnnotationWithMetaMetaAnnotationOnLeaf() throws Exception {
Method m = Leaf.class.getMethod("metaMetaAnnotatedOnLeaf");
@ -128,7 +129,7 @@ public class AnnotationUtilsTests {
assertNotNull(findAnnotation(m, Order.class));
}
/** @since 4.2 */
// @since 4.2
@Test
public void findMethodAnnotationWithMetaAnnotationOnRoot() throws Exception {
Method m = Leaf.class.getMethod("metaAnnotatedOnRoot");
@ -258,42 +259,42 @@ public class AnnotationUtilsTests {
assertNull("Should not find @Component on MetaCycleAnnotatedClass", component);
}
/** @since 4.2 */
// @since 4.2
@Test
public void findClassAnnotationOnInheritedAnnotationInterface() {
Transactional tx = findAnnotation(InheritedAnnotationInterface.class, Transactional.class);
assertNotNull("Should find @Transactional on InheritedAnnotationInterface", tx);
}
/** @since 4.2 */
// @since 4.2
@Test
public void findClassAnnotationOnSubInheritedAnnotationInterface() {
Transactional tx = findAnnotation(SubInheritedAnnotationInterface.class, Transactional.class);
assertNotNull("Should find @Transactional on SubInheritedAnnotationInterface", tx);
}
/** @since 4.2 */
// @since 4.2
@Test
public void findClassAnnotationOnSubSubInheritedAnnotationInterface() {
Transactional tx = findAnnotation(SubSubInheritedAnnotationInterface.class, Transactional.class);
assertNotNull("Should find @Transactional on SubSubInheritedAnnotationInterface", tx);
}
/** @since 4.2 */
// @since 4.2
@Test
public void findClassAnnotationOnNonInheritedAnnotationInterface() {
Order order = findAnnotation(NonInheritedAnnotationInterface.class, Order.class);
assertNotNull("Should find @Order on NonInheritedAnnotationInterface", order);
}
/** @since 4.2 */
// @since 4.2
@Test
public void findClassAnnotationOnSubNonInheritedAnnotationInterface() {
Order order = findAnnotation(SubNonInheritedAnnotationInterface.class, Order.class);
assertNotNull("Should find @Order on SubNonInheritedAnnotationInterface", order);
}
/** @since 4.2 */
// @since 4.2
@Test
public void findClassAnnotationOnSubSubNonInheritedAnnotationInterface() {
Order order = findAnnotation(SubSubNonInheritedAnnotationInterface.class, Order.class);
@ -1240,6 +1241,11 @@ public class AnnotationUtilsTests {
assertEquals("location: ", "", contextConfig.location());
}
@Test(expected = AnnotationConfigurationException.class)
public void synthesizeAnnotationWithAttributeAliasesDifferentValues() throws Exception {
getValue(synthesizeAnnotation(ContextConfigMismatch.class.getAnnotation(ContextConfig.class)));
}
@Test
public void synthesizeAnnotationFromMapWithMinimalAttributesWithAttributeAliases() throws Exception {
Map<String, Object> map = Collections.singletonMap("location", "test.xml");
@ -1357,11 +1363,6 @@ public class AnnotationUtilsTests {
assertNotNull(synthesizedWebMapping2);
assertThat(webMappingWithAliases.toString(), is(not(synthesizedWebMapping1.toString())));
// The unsynthesized annotation for handleMappedWithSamePathAndValueAttributes()
// should produce the same toString() results as synthesized annotations for
// handleMappedWithPathAttribute()
assertToStringForWebMappingWithPathAndValue(webMappingWithPathAndValue);
assertToStringForWebMappingWithPathAndValue(synthesizedWebMapping1);
assertToStringForWebMappingWithPathAndValue(synthesizedWebMapping2);
}
@ -1819,13 +1820,13 @@ public class AnnotationUtilsTests {
interface InterfaceWithRepeated {
@MyRepeatable("A")
@MyRepeatableContainer({ @MyRepeatable("B"), @MyRepeatable("C") })
@MyRepeatableContainer({@MyRepeatable("B"), @MyRepeatable("C")})
@MyRepeatableMeta1
void foo();
}
@MyRepeatable("A")
@MyRepeatableContainer({ @MyRepeatable("B"), @MyRepeatable("C") })
@MyRepeatableContainer({@MyRepeatable("B"), @MyRepeatable("C")})
@MyRepeatableMeta1
static class MyRepeatableClass {
}
@ -1834,7 +1835,7 @@ public class AnnotationUtilsTests {
}
@MyRepeatable("X")
@MyRepeatableContainer({ @MyRepeatable("Y"), @MyRepeatable("Z") })
@MyRepeatableContainer({@MyRepeatable("Y"), @MyRepeatable("Z")})
@MyRepeatableMeta2
static class SubMyRepeatableWithAdditionalLocalDeclarationsClass extends MyRepeatableClass {
}
@ -1964,7 +1965,7 @@ public class AnnotationUtilsTests {
BrokenContextConfig[] value();
}
@Hierarchy({ @ContextConfig("A"), @ContextConfig(location = "B") })
@Hierarchy({@ContextConfig("A"), @ContextConfig(location = "B")})
static class ConfigHierarchyTestCase {
}
@ -2316,7 +2317,7 @@ public class AnnotationUtilsTests {
Filter[] excludeFilters() default {};
}
@ComponentScan(excludeFilters = { @Filter(pattern = "*Foo"), @Filter(pattern = "*Bar") })
@ComponentScan(excludeFilters = {@Filter(pattern = "*Foo"), @Filter(pattern = "*Bar")})
static class ComponentScanClass {
}
@ -2344,4 +2345,8 @@ public class AnnotationUtilsTests {
String text();
}
@ContextConfig(value = "foo", location = "bar")
interface ContextConfigMismatch {
}
}

View File

@ -179,12 +179,11 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue
* names. Encoding is based on the encoded-word syntax defined in RFC 2047
* and relies on {@code MimeUtility} from "javax.mail".
* <p>If not set file names will be encoded as US-ASCII.
* @param multipartCharset the charset to use
* @since 4.1.1
* @see <a href="http://en.wikipedia.org/wiki/MIME#Encoded-Word">Encoded-Word</a>
*/
public void setMultipartCharset(Charset multipartCharset) {
this.multipartCharset = multipartCharset;
public void setMultipartCharset(Charset charset) {
this.multipartCharset = charset;
}

View File

@ -264,6 +264,10 @@ public class DispatcherServlet extends FrameworkServlet {
*/
private static final String DEFAULT_STRATEGIES_PATH = "DispatcherServlet.properties";
/**
* Common prefix that DispatcherServlet's default strategy attributes start with.
*/
private static final String DEFAULT_STRATEGIES_PREFIX = "org.springframework.web.servlet";
/** Additional logger to use when no mapped handler is found for a request. */
protected static final Log pageNotFoundLogger = LogFactory.getLog(PAGE_NOT_FOUND_LOG_CATEGORY);
@ -279,7 +283,7 @@ public class DispatcherServlet extends FrameworkServlet {
defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
}
catch (IOException ex) {
throw new IllegalStateException("Could not load 'DispatcherServlet.properties': " + ex.getMessage());
throw new IllegalStateException("Could not load '" + DEFAULT_STRATEGIES_PATH + "': " + ex.getMessage());
}
}
@ -874,7 +878,7 @@ public class DispatcherServlet extends FrameworkServlet {
Enumeration<?> attrNames = request.getAttributeNames();
while (attrNames.hasMoreElements()) {
String attrName = (String) attrNames.nextElement();
if (this.cleanupAfterInclude || attrName.startsWith("org.springframework.web.servlet")) {
if (this.cleanupAfterInclude || attrName.startsWith(DEFAULT_STRATEGIES_PREFIX)) {
attributesSnapshot.put(attrName, request.getAttribute(attrName));
}
}
@ -1348,7 +1352,7 @@ public class DispatcherServlet extends FrameworkServlet {
Enumeration<?> attrNames = request.getAttributeNames();
while (attrNames.hasMoreElements()) {
String attrName = (String) attrNames.nextElement();
if (this.cleanupAfterInclude || attrName.startsWith("org.springframework.web.servlet")) {
if (this.cleanupAfterInclude || attrName.startsWith(DEFAULT_STRATEGIES_PREFIX)) {
attrsToCheck.add(attrName);
}
}