Polishing
This commit is contained in:
parent
c2bd229d4c
commit
e307dd58db
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -29,7 +29,7 @@ import org.springframework.util.ReflectionUtils;
|
|||
|
||||
/**
|
||||
* Objenesis-based extension of {@link CglibAopProxy} to create proxy instances
|
||||
* without invoking the constructor of the class.
|
||||
* without invoking the constructor of the class. Used by default as of Spring 4.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author Juergen Hoeller
|
||||
|
|
@ -53,7 +53,6 @@ class ObjenesisCglibAopProxy extends CglibAopProxy {
|
|||
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
protected Object createProxyClassAndInstance(Enhancer enhancer, Callback[] callbacks) {
|
||||
Class<?> proxyClass = enhancer.createClass();
|
||||
Object proxyInstance = null;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -62,12 +62,15 @@ abstract class AbstractJCacheOperation<A extends Annotation> implements JCacheOp
|
|||
this.allParameterDetails = initializeAllParameterDetails(methodDetails.getMethod());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the {@link ExceptionTypeFilter} to use to filter exceptions thrown while
|
||||
* invoking the method.
|
||||
*/
|
||||
public abstract ExceptionTypeFilter getExceptionTypeFilter();
|
||||
private static List<CacheParameterDetail> initializeAllParameterDetails(Method method) {
|
||||
int parameterCount = method.getParameterCount();
|
||||
List<CacheParameterDetail> result = new ArrayList<>(parameterCount);
|
||||
for (int i = 0; i < parameterCount; i++) {
|
||||
CacheParameterDetail detail = new CacheParameterDetail(method, i);
|
||||
result.add(detail);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -113,12 +116,25 @@ abstract class AbstractJCacheOperation<A extends Annotation> implements JCacheOp
|
|||
return result.toArray(new CacheInvocationParameter[0]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the {@link ExceptionTypeFilter} to use to filter exceptions thrown while
|
||||
* invoking the method.
|
||||
* @see #createExceptionTypeFilter
|
||||
*/
|
||||
public abstract ExceptionTypeFilter getExceptionTypeFilter();
|
||||
|
||||
/**
|
||||
* Convenience method for subclasses to create a specific {@code ExceptionTypeFilter}.
|
||||
* @see #getExceptionTypeFilter()
|
||||
*/
|
||||
protected ExceptionTypeFilter createExceptionTypeFilter(
|
||||
Class<? extends Throwable>[] includes, Class<? extends Throwable>[] excludes) {
|
||||
|
||||
return new ExceptionTypeFilter(Arrays.asList(includes), Arrays.asList(excludes), true);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getOperationDescription().append("]").toString();
|
||||
|
|
@ -137,16 +153,6 @@ abstract class AbstractJCacheOperation<A extends Annotation> implements JCacheOp
|
|||
}
|
||||
|
||||
|
||||
private static List<CacheParameterDetail> initializeAllParameterDetails(Method method) {
|
||||
List<CacheParameterDetail> result = new ArrayList<>();
|
||||
for (int i = 0; i < method.getParameterCount(); i++) {
|
||||
CacheParameterDetail detail = new CacheParameterDetail(method, i);
|
||||
result.add(detail);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Details for a single cache parameter.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -24,9 +24,10 @@ import org.springframework.cache.interceptor.BasicOperation;
|
|||
import org.springframework.cache.interceptor.CacheResolver;
|
||||
|
||||
/**
|
||||
* Model the base of JSR-107 cache operation.
|
||||
* <p>A cache operation can be statically cached as it does not contain
|
||||
* any runtime operation of a specific cache invocation.
|
||||
* Model the base of JSR-107 cache operation through an interface contract.
|
||||
*
|
||||
* <p>A cache operation can be statically cached as it does not contain any
|
||||
* runtime operation of a specific cache invocation.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @since 4.1
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -20,44 +20,44 @@ import org.springframework.beans.factory.Aware;
|
|||
import org.springframework.core.io.ResourceLoader;
|
||||
|
||||
/**
|
||||
* Interface to be implemented by any object that wishes to be notified of
|
||||
* the <b>ResourceLoader</b> (typically the ApplicationContext) that it runs in.
|
||||
* This is an alternative to a full ApplicationContext dependency via the
|
||||
* ApplicationContextAware interface.
|
||||
* Interface to be implemented by any object that wishes to be notified of the
|
||||
* {@link ResourceLoader} (typically the ApplicationContext) that it runs in.
|
||||
* This is an alternative to a full {@link ApplicationContext} dependency via
|
||||
* the {@link org.springframework.context.ApplicationContextAware} interface.
|
||||
*
|
||||
* <p>Note that Resource dependencies can also be exposed as bean properties
|
||||
* of type Resource, populated via Strings with automatic type conversion by
|
||||
* the bean factory. This removes the need for implementing any callback
|
||||
* interface just for the purpose of accessing a specific file resource.
|
||||
* <p>Note that {@link org.springframework.core.io.Resource} dependencies can also
|
||||
* be exposed as bean properties of type {@code Resource}, populated via Strings
|
||||
* with automatic type conversion by the bean factory. This removes the need for
|
||||
* implementing any callback interface just for the purpose of accessing a
|
||||
* specific file resource.
|
||||
*
|
||||
* <p>You typically need a ResourceLoader when your application object has
|
||||
* to access a variety of file resources whose names are calculated. A good
|
||||
* strategy is to make the object use a DefaultResourceLoader but still
|
||||
* implement ResourceLoaderAware to allow for overriding when running in an
|
||||
* ApplicationContext. See ReloadableResourceBundleMessageSource for an example.
|
||||
* <p>You typically need a {@link ResourceLoader} when your application object has to
|
||||
* access a variety of file resources whose names are calculated. A good strategy is
|
||||
* to make the object use a {@link org.springframework.core.io.DefaultResourceLoader}
|
||||
* but still implement {@code ResourceLoaderAware} to allow for overriding when
|
||||
* running in an {@code ApplicationContext}. See
|
||||
* {@link org.springframework.context.support.ReloadableResourceBundleMessageSource}
|
||||
* for an example.
|
||||
*
|
||||
* <p>A passed-in ResourceLoader can also be checked for the
|
||||
* <b>ResourcePatternResolver</b> interface and cast accordingly, to be able
|
||||
* to resolve resource patterns into arrays of Resource objects. This will always
|
||||
* work when running in an ApplicationContext (the context interface extends
|
||||
* ResourcePatternResolver). Use a PathMatchingResourcePatternResolver as default.
|
||||
* See also the {@code ResourcePatternUtils.getResourcePatternResolver} method.
|
||||
* <p>A passed-in {@code ResourceLoader} can also be checked for the
|
||||
* {@link org.springframework.core.io.support.ResourcePatternResolver} interface
|
||||
* and cast accordingly, in order to resolve resource patterns into arrays of
|
||||
* {@code Resource} objects. This will always work when running in an ApplicationContext
|
||||
* (since the context interface extends the ResourcePatternResolver interface). Use a
|
||||
* {@link org.springframework.core.io.support.PathMatchingResourcePatternResolver} as
|
||||
* default; see also the {@code ResourcePatternUtils.getResourcePatternResolver} method.
|
||||
*
|
||||
* <p>As alternative to a ResourcePatternResolver dependency, consider exposing
|
||||
* bean properties of type Resource array, populated via pattern Strings with
|
||||
* automatic type conversion by the bean factory.
|
||||
* <p>As an alternative to a {@code ResourcePatternResolver} dependency, consider
|
||||
* exposing bean properties of type {@code Resource} array, populated via pattern
|
||||
* Strings with automatic type conversion by the bean factory at binding time.
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @author Chris Beams
|
||||
* @since 10.03.2004
|
||||
* @see ApplicationContextAware
|
||||
* @see org.springframework.beans.factory.InitializingBean
|
||||
* @see org.springframework.core.io.Resource
|
||||
* @see org.springframework.core.io.ResourceLoader
|
||||
* @see org.springframework.core.io.support.ResourcePatternResolver
|
||||
* @see org.springframework.core.io.support.ResourcePatternUtils#getResourcePatternResolver
|
||||
* @see org.springframework.core.io.DefaultResourceLoader
|
||||
* @see org.springframework.core.io.support.PathMatchingResourcePatternResolver
|
||||
* @see org.springframework.context.support.ReloadableResourceBundleMessageSource
|
||||
*/
|
||||
public interface ResourceLoaderAware extends Aware {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -49,10 +49,10 @@ public abstract class ResourcePatternUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* Return a default ResourcePatternResolver for the given ResourceLoader.
|
||||
* <p>This might be the ResourceLoader itself, if it implements the
|
||||
* ResourcePatternResolver extension, or a PathMatchingResourcePatternResolver
|
||||
* built on the given ResourceLoader.
|
||||
* Return a default {@link ResourcePatternResolver} for the given {@link ResourceLoader}.
|
||||
* <p>This might be the {@code ResourceLoader} itself, if it implements the
|
||||
* {@code ResourcePatternResolver} extension, or a default
|
||||
* {@link PathMatchingResourcePatternResolver} built on the given {@code ResourceLoader}.
|
||||
* @param resourceLoader the ResourceLoader to build a pattern resolver for
|
||||
* (may be {@code null} to indicate a default ResourceLoader)
|
||||
* @return the ResourcePatternResolver
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -126,8 +126,8 @@ public class CompoundExpression extends SpelNodeImpl {
|
|||
|
||||
@Override
|
||||
public void generateCode(MethodVisitor mv, CodeFlow cf) {
|
||||
for (int i = 0; i < this.children.length;i++) {
|
||||
this.children[i].generateCode(mv, cf);
|
||||
for (SpelNodeImpl child : this.children) {
|
||||
child.generateCode(mv, cf);
|
||||
}
|
||||
cf.pushDescriptor(this.exitTypeDescriptor);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2019 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,8 +21,8 @@ import org.springframework.transaction.TransactionDefinition;
|
|||
|
||||
/**
|
||||
* This interface adds a {@code rollbackOn} specification to {@link TransactionDefinition}.
|
||||
* As custom {@code rollbackOn} is only possible with AOP, this class resides
|
||||
* in the AOP transaction package.
|
||||
* As custom {@code rollbackOn} is only possible with AOP, it resides in the AOP-related
|
||||
* transaction subpackage.
|
||||
*
|
||||
* @author Rod Johnson
|
||||
* @author Juergen Hoeller
|
||||
|
|
@ -36,6 +36,7 @@ public interface TransactionAttribute extends TransactionDefinition {
|
|||
* Return a qualifier value associated with this transaction attribute.
|
||||
* <p>This may be used for choosing a corresponding transaction manager
|
||||
* to process this specific transaction.
|
||||
* @since 3.0
|
||||
*/
|
||||
@Nullable
|
||||
String getQualifier();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -45,7 +45,6 @@ public class TransactionAttributeEditor extends PropertyEditorSupport {
|
|||
/**
|
||||
* Format is PROPAGATION_NAME,ISOLATION_NAME,readOnly,timeout_NNNN,+Exception1,-Exception2.
|
||||
* Null or the empty string means that the method is non transactional.
|
||||
* @see java.beans.PropertyEditor#setAsText(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setAsText(String text) throws IllegalArgumentException {
|
||||
|
|
@ -53,36 +52,36 @@ public class TransactionAttributeEditor extends PropertyEditorSupport {
|
|||
// tokenize it with ","
|
||||
String[] tokens = StringUtils.commaDelimitedListToStringArray(text);
|
||||
RuleBasedTransactionAttribute attr = new RuleBasedTransactionAttribute();
|
||||
for (int i = 0; i < tokens.length; i++) {
|
||||
for (String token : tokens) {
|
||||
// Trim leading and trailing whitespace.
|
||||
String token = StringUtils.trimWhitespace(tokens[i].trim());
|
||||
String trimmedToken = StringUtils.trimWhitespace(token.trim());
|
||||
// Check whether token contains illegal whitespace within text.
|
||||
if (StringUtils.containsWhitespace(token)) {
|
||||
if (StringUtils.containsWhitespace(trimmedToken)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Transaction attribute token contains illegal whitespace: [" + token + "]");
|
||||
"Transaction attribute token contains illegal whitespace: [" + trimmedToken + "]");
|
||||
}
|
||||
// Check token type.
|
||||
if (token.startsWith(RuleBasedTransactionAttribute.PREFIX_PROPAGATION)) {
|
||||
attr.setPropagationBehaviorName(token);
|
||||
if (trimmedToken.startsWith(RuleBasedTransactionAttribute.PREFIX_PROPAGATION)) {
|
||||
attr.setPropagationBehaviorName(trimmedToken);
|
||||
}
|
||||
else if (token.startsWith(RuleBasedTransactionAttribute.PREFIX_ISOLATION)) {
|
||||
attr.setIsolationLevelName(token);
|
||||
else if (trimmedToken.startsWith(RuleBasedTransactionAttribute.PREFIX_ISOLATION)) {
|
||||
attr.setIsolationLevelName(trimmedToken);
|
||||
}
|
||||
else if (token.startsWith(RuleBasedTransactionAttribute.PREFIX_TIMEOUT)) {
|
||||
String value = token.substring(DefaultTransactionAttribute.PREFIX_TIMEOUT.length());
|
||||
else if (trimmedToken.startsWith(RuleBasedTransactionAttribute.PREFIX_TIMEOUT)) {
|
||||
String value = trimmedToken.substring(DefaultTransactionAttribute.PREFIX_TIMEOUT.length());
|
||||
attr.setTimeout(Integer.parseInt(value));
|
||||
}
|
||||
else if (token.equals(RuleBasedTransactionAttribute.READ_ONLY_MARKER)) {
|
||||
else if (trimmedToken.equals(RuleBasedTransactionAttribute.READ_ONLY_MARKER)) {
|
||||
attr.setReadOnly(true);
|
||||
}
|
||||
else if (token.startsWith(RuleBasedTransactionAttribute.PREFIX_COMMIT_RULE)) {
|
||||
attr.getRollbackRules().add(new NoRollbackRuleAttribute(token.substring(1)));
|
||||
else if (trimmedToken.startsWith(RuleBasedTransactionAttribute.PREFIX_COMMIT_RULE)) {
|
||||
attr.getRollbackRules().add(new NoRollbackRuleAttribute(trimmedToken.substring(1)));
|
||||
}
|
||||
else if (token.startsWith(RuleBasedTransactionAttribute.PREFIX_ROLLBACK_RULE)) {
|
||||
attr.getRollbackRules().add(new RollbackRuleAttribute(token.substring(1)));
|
||||
else if (trimmedToken.startsWith(RuleBasedTransactionAttribute.PREFIX_ROLLBACK_RULE)) {
|
||||
attr.getRollbackRules().add(new RollbackRuleAttribute(trimmedToken.substring(1)));
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException("Invalid transaction attribute token: [" + token + "]");
|
||||
throw new IllegalArgumentException("Invalid transaction attribute token: [" + trimmedToken + "]");
|
||||
}
|
||||
}
|
||||
setValue(attr);
|
||||
|
|
|
|||
Loading…
Reference in New Issue