Avoid unnecessary parameter name inspection for constructor-arg resolution
Closes gh-29612
This commit is contained in:
@@ -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.
|
||||
@@ -360,6 +360,25 @@ public class ConstructorArgumentValues {
|
||||
return valueHolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether at least one argument value refers to a name.
|
||||
* @since 6.0.3
|
||||
* @see ValueHolder#getName()
|
||||
*/
|
||||
public boolean containsNamedArgument() {
|
||||
for (ValueHolder valueHolder : this.indexedArgumentValues.values()) {
|
||||
if (valueHolder.getName() != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (ValueHolder valueHolder : this.genericArgumentValues) {
|
||||
if (valueHolder.getName() != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of argument values held in this instance,
|
||||
* counting both indexed and generic argument values.
|
||||
|
||||
@@ -232,11 +232,14 @@ class ConstructorResolver {
|
||||
Class<?>[] paramTypes = candidate.getParameterTypes();
|
||||
if (resolvedValues != null) {
|
||||
try {
|
||||
String[] paramNames = ConstructorPropertiesChecker.evaluate(candidate, parameterCount);
|
||||
if (paramNames == null) {
|
||||
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
|
||||
if (pnd != null) {
|
||||
paramNames = pnd.getParameterNames(candidate);
|
||||
String[] paramNames = null;
|
||||
if (resolvedValues.containsNamedArgument()) {
|
||||
paramNames = ConstructorPropertiesChecker.evaluate(candidate, parameterCount);
|
||||
if (paramNames == null) {
|
||||
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
|
||||
if (pnd != null) {
|
||||
paramNames = pnd.getParameterNames(candidate);
|
||||
}
|
||||
}
|
||||
}
|
||||
argsHolder = createArgumentArray(beanName, mbd, resolvedValues, bw, paramTypes, paramNames,
|
||||
@@ -536,9 +539,11 @@ class ConstructorResolver {
|
||||
// Resolved constructor arguments: type conversion and/or autowiring necessary.
|
||||
try {
|
||||
String[] paramNames = null;
|
||||
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
|
||||
if (pnd != null) {
|
||||
paramNames = pnd.getParameterNames(candidate);
|
||||
if (resolvedValues != null && resolvedValues.containsNamedArgument()) {
|
||||
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
|
||||
if (pnd != null) {
|
||||
paramNames = pnd.getParameterNames(candidate);
|
||||
}
|
||||
}
|
||||
argsHolder = createArgumentArray(beanName, mbd, resolvedValues, bw,
|
||||
paramTypes, paramNames, candidate, autowiring, candidates.size() == 1);
|
||||
|
||||
Reference in New Issue
Block a user