|
|
|
@ -468,14 +468,14 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean |
|
|
|
value = resolvedCachedArgument(beanName, this.cachedFieldValue); |
|
|
|
value = resolvedCachedArgument(beanName, this.cachedFieldValue); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
synchronized (pvs) { |
|
|
|
DependencyDescriptor descriptor = new DependencyDescriptor(field, this.required); |
|
|
|
|
|
|
|
Set<String> autowiredBeanNames = new LinkedHashSet<String>(1); |
|
|
|
|
|
|
|
TypeConverter typeConverter = beanFactory.getTypeConverter(); |
|
|
|
|
|
|
|
value = beanFactory.resolveDependency(descriptor, beanName, autowiredBeanNames, typeConverter); |
|
|
|
|
|
|
|
synchronized (this) { |
|
|
|
if (!this.cached) { |
|
|
|
if (!this.cached) { |
|
|
|
Set<String> autowiredBeanNames = new LinkedHashSet<String>(1); |
|
|
|
|
|
|
|
TypeConverter typeConverter = beanFactory.getTypeConverter(); |
|
|
|
|
|
|
|
DependencyDescriptor descriptor = new DependencyDescriptor(field, this.required); |
|
|
|
|
|
|
|
this.cachedFieldValue = descriptor; |
|
|
|
|
|
|
|
value = beanFactory.resolveDependency(descriptor, beanName, autowiredBeanNames, typeConverter); |
|
|
|
|
|
|
|
if (value != null) { |
|
|
|
if (value != null) { |
|
|
|
|
|
|
|
this.cachedFieldValue = descriptor; |
|
|
|
registerDependentBeans(beanName, autowiredBeanNames); |
|
|
|
registerDependentBeans(beanName, autowiredBeanNames); |
|
|
|
if (autowiredBeanNames.size() == 1) { |
|
|
|
if (autowiredBeanNames.size() == 1) { |
|
|
|
String autowiredBeanName = autowiredBeanNames.iterator().next(); |
|
|
|
String autowiredBeanName = autowiredBeanNames.iterator().next(); |
|
|
|
@ -491,10 +491,6 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean |
|
|
|
} |
|
|
|
} |
|
|
|
this.cached = true; |
|
|
|
this.cached = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
|
|
|
|
// Already cached in the meantime...
|
|
|
|
|
|
|
|
value = resolvedCachedArgument(beanName, this.cachedFieldValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (value != null) { |
|
|
|
if (value != null) { |
|
|
|
@ -538,26 +534,29 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean |
|
|
|
arguments = resolveCachedArguments(beanName); |
|
|
|
arguments = resolveCachedArguments(beanName); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
synchronized (pvs) { |
|
|
|
Class[] paramTypes = method.getParameterTypes(); |
|
|
|
|
|
|
|
arguments = new Object[paramTypes.length]; |
|
|
|
|
|
|
|
DependencyDescriptor[] descriptors = new DependencyDescriptor[paramTypes.length]; |
|
|
|
|
|
|
|
Set<String> autowiredBeanNames = new LinkedHashSet<String>(paramTypes.length); |
|
|
|
|
|
|
|
TypeConverter typeConverter = beanFactory.getTypeConverter(); |
|
|
|
|
|
|
|
for (int i = 0; i < arguments.length; i++) { |
|
|
|
|
|
|
|
MethodParameter methodParam = new MethodParameter(method, i); |
|
|
|
|
|
|
|
GenericTypeResolver.resolveParameterType(methodParam, bean.getClass()); |
|
|
|
|
|
|
|
descriptors[i] = new DependencyDescriptor(methodParam, this.required); |
|
|
|
|
|
|
|
arguments[i] = beanFactory.resolveDependency( |
|
|
|
|
|
|
|
descriptors[i], beanName, autowiredBeanNames, typeConverter); |
|
|
|
|
|
|
|
if (arguments[i] == null) { |
|
|
|
|
|
|
|
arguments = null; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
synchronized (this) { |
|
|
|
if (!this.cached) { |
|
|
|
if (!this.cached) { |
|
|
|
Class[] paramTypes = method.getParameterTypes(); |
|
|
|
|
|
|
|
arguments = new Object[paramTypes.length]; |
|
|
|
|
|
|
|
Set<String> autowiredBeanNames = new LinkedHashSet<String>(arguments.length); |
|
|
|
|
|
|
|
TypeConverter typeConverter = beanFactory.getTypeConverter(); |
|
|
|
|
|
|
|
this.cachedMethodArguments = new Object[arguments.length]; |
|
|
|
|
|
|
|
for (int i = 0; i < arguments.length; i++) { |
|
|
|
|
|
|
|
MethodParameter methodParam = new MethodParameter(method, i); |
|
|
|
|
|
|
|
GenericTypeResolver.resolveParameterType(methodParam, bean.getClass()); |
|
|
|
|
|
|
|
DependencyDescriptor descriptor = new DependencyDescriptor(methodParam, this.required); |
|
|
|
|
|
|
|
this.cachedMethodArguments[i] = descriptor; |
|
|
|
|
|
|
|
arguments[i] = beanFactory.resolveDependency( |
|
|
|
|
|
|
|
descriptor, beanName, autowiredBeanNames, typeConverter); |
|
|
|
|
|
|
|
if (arguments[i] == null) { |
|
|
|
|
|
|
|
arguments = null; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (arguments != null) { |
|
|
|
if (arguments != null) { |
|
|
|
|
|
|
|
this.cachedMethodArguments = new Object[arguments.length]; |
|
|
|
|
|
|
|
for (int i = 0; i < arguments.length; i++) { |
|
|
|
|
|
|
|
this.cachedMethodArguments[i] = descriptors[i]; |
|
|
|
|
|
|
|
} |
|
|
|
registerDependentBeans(beanName, autowiredBeanNames); |
|
|
|
registerDependentBeans(beanName, autowiredBeanNames); |
|
|
|
if (autowiredBeanNames.size() == paramTypes.length) { |
|
|
|
if (autowiredBeanNames.size() == paramTypes.length) { |
|
|
|
Iterator<String> it = autowiredBeanNames.iterator(); |
|
|
|
Iterator<String> it = autowiredBeanNames.iterator(); |
|
|
|
@ -579,10 +578,6 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean |
|
|
|
} |
|
|
|
} |
|
|
|
this.cached = true; |
|
|
|
this.cached = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
|
|
|
|
// Already cached in the meantime...
|
|
|
|
|
|
|
|
arguments = resolveCachedArguments(beanName); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (arguments != null) { |
|
|
|
if (arguments != null) { |
|
|
|
|