diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index 725aa9f64ed..fe50a0bc6fc 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -90,8 +90,7 @@ import org.springframework.util.StringUtils; * operating on pre-resolved bean definition metadata objects. * *
Note that readers for specific bean definition formats are typically - * implemented separately rather than as bean factory subclasses: - * see for example {@link PropertiesBeanDefinitionReader} and + * implemented separately rather than as bean factory subclasses: see for example * {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader}. * *
For an alternative implementation of the
@@ -179,7 +178,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
private volatile String[] frozenBeanDefinitionNames;
/** Whether bean definition metadata may be cached for all beans */
- private volatile boolean configurationFrozen = false;
+ private volatile boolean configurationFrozen;
/**
diff --git a/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java b/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java
index 69583c44043..7a1ba20fc84 100644
--- a/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java
+++ b/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2020 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.
@@ -53,8 +53,7 @@ public abstract class AbstractValueAdaptingCache implements Cache {
@Override
public ValueWrapper get(Object key) {
- Object value = lookup(key);
- return toValueWrapper(value);
+ return toValueWrapper(lookup(key));
}
@Override
@@ -113,5 +112,4 @@ public abstract class AbstractValueAdaptingCache implements Cache {
return (storeValue != null ? new SimpleValueWrapper(fromStoreValue(storeValue)) : null);
}
-
}
diff --git a/spring-tx/src/main/java/org/springframework/dao/support/PersistenceExceptionTranslationInterceptor.java b/spring-tx/src/main/java/org/springframework/dao/support/PersistenceExceptionTranslationInterceptor.java
index af3b0c495d2..613ebdd5ff5 100644
--- a/spring-tx/src/main/java/org/springframework/dao/support/PersistenceExceptionTranslationInterceptor.java
+++ b/spring-tx/src/main/java/org/springframework/dao/support/PersistenceExceptionTranslationInterceptor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2020 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.
@@ -151,16 +151,15 @@ public class PersistenceExceptionTranslationInterceptor
/**
* Detect all PersistenceExceptionTranslators in the given BeanFactory.
- * @param beanFactory the ListableBeanFactory to obtaining all
- * PersistenceExceptionTranslators from
+ * @param bf the ListableBeanFactory to obtain PersistenceExceptionTranslators from
* @return a chained PersistenceExceptionTranslator, combining all
- * PersistenceExceptionTranslators found in the factory
+ * PersistenceExceptionTranslators found in the given bean factory
* @see ChainedPersistenceExceptionTranslator
*/
- protected PersistenceExceptionTranslator detectPersistenceExceptionTranslators(ListableBeanFactory beanFactory) {
+ protected PersistenceExceptionTranslator detectPersistenceExceptionTranslators(ListableBeanFactory bf) {
// Find all translators, being careful not to activate FactoryBeans.
Map For instance, {@code text/*} includes {@code text/plain} and {@code text/html},
* and {@code application/*+xml} includes {@code application/soap+xml}, etc.
* This method is not symmetric.
- * Simply calls {@link #includes(MimeType)} but declared with a
+ * Simply calls {@link MimeType#includes(MimeType)} but declared with a
* {@code MediaType} parameter for binary backwards compatibility.
* @param other the reference media type with which to compare
* @return {@code true} if this media type includes the given media type;
@@ -396,7 +395,7 @@ public class MediaType extends MimeType implements Serializable {
* For instance, {@code text/*} is compatible with {@code text/plain},
* {@code text/html}, and vice versa. In effect, this method is similar to
* {@link #includes}, except that it is symmetric.
- * Simply calls {@link #isCompatibleWith(MimeType)} but declared with a
+ * Simply calls {@link MimeType#isCompatibleWith(MimeType)} but declared with a
* {@code MediaType} parameter for binary backwards compatibility.
* @param other the reference media type with which to compare
* @return {@code true} if this media type is compatible with the given media type;
@@ -470,7 +469,7 @@ public class MediaType extends MimeType implements Serializable {
}
/**
- * Parse the given comma-separated string into a list of {@code MediaType} objects.
+ * Parse the comma-separated string into a list of {@code MediaType} objects.
* This method can be used to parse an Accept or Content-Type header.
* @param mediaTypes the string to parse
* @return the list of media types
diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java b/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java
index 7409c7367e0..bd179de2e09 100644
--- a/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java
+++ b/spring-web/src/main/java/org/springframework/web/bind/support/WebRequestDataBinder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2016 the original author or authors.
+ * Copyright 2002-2020 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,7 +106,7 @@ public class WebRequestDataBinder extends WebDataBinder {
* The type of the target property for a multipart file can be Part, MultipartFile,
* byte[], or String. The latter two receive the contents of the uploaded file;
* all metadata like original file name, content type, etc are lost in those cases.
- * @param request request with parameters to bind (can be multipart)
+ * @param request the request with parameters to bind (can be multipart)
* @see org.springframework.web.multipart.MultipartRequest
* @see org.springframework.web.multipart.MultipartFile
* @see javax.servlet.http.Part
@@ -114,12 +114,12 @@ public class WebRequestDataBinder extends WebDataBinder {
*/
public void bind(WebRequest request) {
MutablePropertyValues mpvs = new MutablePropertyValues(request.getParameterMap());
- if (isMultipartRequest(request) && request instanceof NativeWebRequest) {
+ if (request instanceof NativeWebRequest) {
MultipartRequest multipartRequest = ((NativeWebRequest) request).getNativeRequest(MultipartRequest.class);
if (multipartRequest != null) {
bindMultipart(multipartRequest.getMultiFileMap(), mpvs);
}
- else if (servlet3Parts) {
+ else if (servlet3Parts && isMultipartRequest(request)) {
HttpServletRequest serlvetRequest = ((NativeWebRequest) request).getNativeRequest(HttpServletRequest.class);
new Servlet3MultipartHelper(isBindEmptyMultipartFiles()).bindParts(serlvetRequest, mpvs);
}
@@ -129,11 +129,11 @@ public class WebRequestDataBinder extends WebDataBinder {
/**
* Check if the request is a multipart request (by checking its Content-Type header).
- * @param request request with parameters to bind
+ * @param request the request with parameters to bind
*/
private boolean isMultipartRequest(WebRequest request) {
String contentType = request.getHeader("Content-Type");
- return (contentType != null && StringUtils.startsWithIgnoreCase(contentType, "multipart"));
+ return StringUtils.startsWithIgnoreCase(contentType, "multipart/");
}
/**
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java
index 8256952363b..df261c63985 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2017 the original author or authors.
+ * Copyright 2002-2020 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.
@@ -85,10 +85,16 @@ public class HandlerExecutionChain {
return this.handler;
}
+ /**
+ * Add the given interceptor to the end of this chain.
+ */
public void addInterceptor(HandlerInterceptor interceptor) {
initInterceptorList().add(interceptor);
}
+ /**
+ * Add the given interceptors to the end of this chain.
+ */
public void addInterceptors(HandlerInterceptor... interceptors) {
if (!ObjectUtils.isEmpty(interceptors)) {
CollectionUtils.mergeArrayIntoCollection(interceptors, initInterceptorList());
@@ -182,13 +188,16 @@ public class HandlerExecutionChain {
HandlerInterceptor[] interceptors = getInterceptors();
if (!ObjectUtils.isEmpty(interceptors)) {
for (int i = interceptors.length - 1; i >= 0; i--) {
- if (interceptors[i] instanceof AsyncHandlerInterceptor) {
+ HandlerInterceptor interceptor = interceptors[i];
+ if (interceptor instanceof AsyncHandlerInterceptor) {
try {
- AsyncHandlerInterceptor asyncInterceptor = (AsyncHandlerInterceptor) interceptors[i];
+ AsyncHandlerInterceptor asyncInterceptor = (AsyncHandlerInterceptor) interceptor;
asyncInterceptor.afterConcurrentHandlingStarted(request, response, this.handler);
}
catch (Throwable ex) {
- logger.error("Interceptor [" + interceptors[i] + "] failed in afterConcurrentHandlingStarted", ex);
+ if (logger.isErrorEnabled()) {
+ logger.error("Interceptor [" + interceptor + "] failed in afterConcurrentHandlingStarted", ex);
+ }
}
}
}
@@ -197,7 +206,7 @@ public class HandlerExecutionChain {
/**
- * Delegates to the handler's {@code toString()}.
+ * Delegates to the handler's {@code toString()} implementation.
*/
@Override
public String toString() {
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
index 110057e495c..dac455c179b 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2020 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.
@@ -187,9 +187,8 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
}
/**
- * Set "global" CORS configuration based on URL patterns. By default the first
- * matching URL pattern is combined with the CORS configuration for the
- * handler, if any.
+ * Set the "global" CORS configurations based on URL patterns. By default the first
+ * matching URL pattern is combined with the CORS configuration for the handler, if any.
* @since 4.2
*/
public void setCorsConfigurations(Map This is called in addition to any {@link MappedInterceptor}s that may have been provided
- * via {@link #setInterceptors}, by default adding all beans of type {@link MappedInterceptor}
- * from the current context and its ancestors. Subclasses can override and refine this policy.
- * @param mappedInterceptors an empty list to add {@link MappedInterceptor} instances to
+ * Detect beans of type {@link MappedInterceptor} and add them to the list
+ * of mapped interceptors.
+ * This is called in addition to any {@link MappedInterceptor}s that may
+ * have been provided via {@link #setInterceptors}, by default adding all
+ * beans of type {@link MappedInterceptor} from the current context and its
+ * ancestors. Subclasses can override and refine this policy.
+ * @param mappedInterceptors an empty list to add to
*/
protected void detectMappedInterceptors(List By default, the supported interceptor types are {@link HandlerInterceptor}
- * and {@link WebRequestInterceptor}. Each given {@link WebRequestInterceptor}
- * will be wrapped in a {@link WebRequestHandlerInterceptorAdapter}.
- * Can be overridden in subclasses.
- * @param interceptor the specified interceptor object
- * @return the interceptor wrapped as HandlerInterceptor
+ * Adapt the given interceptor object to {@link HandlerInterceptor}.
+ * By default, the supported interceptor types are
+ * {@link HandlerInterceptor} and {@link WebRequestInterceptor}. Each given
+ * {@link WebRequestInterceptor} is wrapped with
+ * {@link WebRequestHandlerInterceptorAdapter}.
+ * @param interceptor the interceptor
+ * @return the interceptor downcast or adapted to HandlerInterceptor
* @see org.springframework.web.servlet.HandlerInterceptor
* @see org.springframework.web.context.request.WebRequestInterceptor
* @see WebRequestHandlerInterceptorAdapter
@@ -317,7 +317,8 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
/**
* Return the adapted interceptors as {@link HandlerInterceptor} array.
- * @return the array of {@link HandlerInterceptor}s, or {@code null} if none
+ * @return the array of {@link HandlerInterceptor HandlerInterceptor}s,
+ * or {@code null} if none
*/
protected final HandlerInterceptor[] getAdaptedInterceptors() {
int count = this.adaptedInterceptors.size();
@@ -394,8 +395,8 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
* Build a {@link HandlerExecutionChain} for the given handler, including
* applicable interceptors.
* The default implementation builds a standard {@link HandlerExecutionChain}
- * with the given handler, the handler mapping's common interceptors, and any
- * {@link MappedInterceptor}s matching to the current request URL. Interceptors
+ * with the given handler, the common interceptors of the handler mapping, and any
+ * {@link MappedInterceptor MappedInterceptors} matching to the current request URL. Interceptors
* are added in the order they were registered. Subclasses may override this
* in order to extend/rearrange the list of interceptors.
* NOTE: The passed-in handler object may be a raw handler or a
@@ -464,12 +465,12 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
if (CorsUtils.isPreFlightRequest(request)) {
HandlerInterceptor[] interceptors = chain.getInterceptors();
- chain = new HandlerExecutionChain(new PreFlightHandler(config), interceptors);
+ return new HandlerExecutionChain(new PreFlightHandler(config), interceptors);
}
else {
chain.addInterceptor(new CorsInterceptor(config));
+ return chain;
}
- return chain;
}