Merge branch '5.3.x'
# Conflicts: # spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java # spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java # spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java # spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java # spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2022 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.
|
||||
@@ -58,8 +58,18 @@ public class ReflectiveMethodExecutor implements MethodExecutor {
|
||||
* @param method the method to invoke
|
||||
*/
|
||||
public ReflectiveMethodExecutor(Method method) {
|
||||
this(method, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new executor for the given method.
|
||||
* @param method the method to invoke
|
||||
* @param targetClass the target class to invoke the method on
|
||||
* @since 5.3.16
|
||||
*/
|
||||
public ReflectiveMethodExecutor(Method method, @Nullable Class<?> targetClass) {
|
||||
this.originalMethod = method;
|
||||
this.methodToInvoke = ClassUtils.getInterfaceMethodIfPossible(method);
|
||||
this.methodToInvoke = ClassUtils.getInterfaceMethodIfPossible(method, targetClass);
|
||||
if (method.isVarArgs()) {
|
||||
this.varargsPosition = method.getParameterCount() - 1;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2022 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.
|
||||
@@ -176,7 +176,7 @@ public class ReflectiveMethodResolver implements MethodResolver {
|
||||
}
|
||||
if (matchInfo != null) {
|
||||
if (matchInfo.isExactMatch()) {
|
||||
return new ReflectiveMethodExecutor(method);
|
||||
return new ReflectiveMethodExecutor(method, type);
|
||||
}
|
||||
else if (matchInfo.isCloseMatch()) {
|
||||
if (this.useDistance) {
|
||||
@@ -204,13 +204,13 @@ public class ReflectiveMethodResolver implements MethodResolver {
|
||||
}
|
||||
}
|
||||
if (closeMatch != null) {
|
||||
return new ReflectiveMethodExecutor(closeMatch);
|
||||
return new ReflectiveMethodExecutor(closeMatch, type);
|
||||
}
|
||||
else if (matchRequiringConversion != null) {
|
||||
if (multipleOptions) {
|
||||
throw new SpelEvaluationException(SpelMessage.MULTIPLE_POSSIBLE_METHODS, name);
|
||||
}
|
||||
return new ReflectiveMethodExecutor(matchRequiringConversion);
|
||||
return new ReflectiveMethodExecutor(matchRequiringConversion, type);
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2022 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 ReflectivePropertyAccessor implements PropertyAccessor {
|
||||
// The readerCache will only contain gettable properties (let's not worry about setters for now).
|
||||
Property property = new Property(type, method, null);
|
||||
TypeDescriptor typeDescriptor = new TypeDescriptor(property);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method, type);
|
||||
this.readerCache.put(cacheKey, new InvokerPair(method, typeDescriptor));
|
||||
this.typeDescriptorCache.put(cacheKey, typeDescriptor);
|
||||
return true;
|
||||
@@ -173,7 +173,7 @@ public class ReflectivePropertyAccessor implements PropertyAccessor {
|
||||
// The readerCache will only contain gettable properties (let's not worry about setters for now).
|
||||
Property property = new Property(type, method, null);
|
||||
TypeDescriptor typeDescriptor = new TypeDescriptor(property);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method, type);
|
||||
invoker = new InvokerPair(method, typeDescriptor);
|
||||
this.lastReadInvokerPair = invoker;
|
||||
this.readerCache.put(cacheKey, invoker);
|
||||
@@ -233,7 +233,7 @@ public class ReflectivePropertyAccessor implements PropertyAccessor {
|
||||
// Treat it like a property
|
||||
Property property = new Property(type, null, method);
|
||||
TypeDescriptor typeDescriptor = new TypeDescriptor(property);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method, type);
|
||||
this.writerCache.put(cacheKey, method);
|
||||
this.typeDescriptorCache.put(cacheKey, typeDescriptor);
|
||||
return true;
|
||||
@@ -282,7 +282,7 @@ public class ReflectivePropertyAccessor implements PropertyAccessor {
|
||||
if (method == null) {
|
||||
method = findSetterForProperty(name, type, target);
|
||||
if (method != null) {
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method, type);
|
||||
cachedMember = method;
|
||||
this.writerCache.put(cacheKey, cachedMember);
|
||||
}
|
||||
@@ -527,7 +527,7 @@ public class ReflectivePropertyAccessor implements PropertyAccessor {
|
||||
method = findGetterForProperty(name, type, target);
|
||||
if (method != null) {
|
||||
TypeDescriptor typeDescriptor = new TypeDescriptor(new MethodParameter(method, -1));
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method);
|
||||
method = ClassUtils.getInterfaceMethodIfPossible(method, type);
|
||||
invocationTarget = new InvokerPair(method, typeDescriptor);
|
||||
ReflectionUtils.makeAccessible(method);
|
||||
this.readerCache.put(cacheKey, invocationTarget);
|
||||
|
||||
Reference in New Issue
Block a user