|
|
|
@ -16,7 +16,6 @@ |
|
|
|
|
|
|
|
|
|
|
|
package org.springframework.beans.factory.aot; |
|
|
|
package org.springframework.beans.factory.aot; |
|
|
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Array; |
|
|
|
|
|
|
|
import java.lang.reflect.Constructor; |
|
|
|
import java.lang.reflect.Constructor; |
|
|
|
import java.lang.reflect.Executable; |
|
|
|
import java.lang.reflect.Executable; |
|
|
|
import java.lang.reflect.Method; |
|
|
|
import java.lang.reflect.Method; |
|
|
|
@ -31,8 +30,6 @@ import org.springframework.beans.BeanInstantiationException; |
|
|
|
import org.springframework.beans.BeansException; |
|
|
|
import org.springframework.beans.BeansException; |
|
|
|
import org.springframework.beans.TypeConverter; |
|
|
|
import org.springframework.beans.TypeConverter; |
|
|
|
import org.springframework.beans.factory.BeanFactory; |
|
|
|
import org.springframework.beans.factory.BeanFactory; |
|
|
|
import org.springframework.beans.factory.InjectionPoint; |
|
|
|
|
|
|
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
|
|
|
|
|
|
|
import org.springframework.beans.factory.UnsatisfiedDependencyException; |
|
|
|
import org.springframework.beans.factory.UnsatisfiedDependencyException; |
|
|
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory; |
|
|
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory; |
|
|
|
import org.springframework.beans.factory.config.ConstructorArgumentValues; |
|
|
|
import org.springframework.beans.factory.config.ConstructorArgumentValues; |
|
|
|
@ -44,7 +41,6 @@ import org.springframework.beans.factory.support.InstanceSupplier; |
|
|
|
import org.springframework.beans.factory.support.RegisteredBean; |
|
|
|
import org.springframework.beans.factory.support.RegisteredBean; |
|
|
|
import org.springframework.beans.factory.support.RootBeanDefinition; |
|
|
|
import org.springframework.beans.factory.support.RootBeanDefinition; |
|
|
|
import org.springframework.beans.factory.support.SimpleInstantiationStrategy; |
|
|
|
import org.springframework.beans.factory.support.SimpleInstantiationStrategy; |
|
|
|
import org.springframework.core.CollectionFactory; |
|
|
|
|
|
|
|
import org.springframework.core.MethodParameter; |
|
|
|
import org.springframework.core.MethodParameter; |
|
|
|
import org.springframework.lang.Nullable; |
|
|
|
import org.springframework.lang.Nullable; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
@ -239,7 +235,7 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl |
|
|
|
return resolveArguments(registeredBean, this.lookup.get(registeredBean)); |
|
|
|
return resolveArguments(registeredBean, this.lookup.get(registeredBean)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private AutowiredArguments resolveArguments(RegisteredBean registeredBean,Executable executable) { |
|
|
|
private AutowiredArguments resolveArguments(RegisteredBean registeredBean, Executable executable) { |
|
|
|
Assert.isInstanceOf(AbstractAutowireCapableBeanFactory.class, registeredBean.getBeanFactory()); |
|
|
|
Assert.isInstanceOf(AbstractAutowireCapableBeanFactory.class, registeredBean.getBeanFactory()); |
|
|
|
String beanName = registeredBean.getBeanName(); |
|
|
|
String beanName = registeredBean.getBeanName(); |
|
|
|
Class<?> beanClass = registeredBean.getBeanClass(); |
|
|
|
Class<?> beanClass = registeredBean.getBeanClass(); |
|
|
|
@ -264,8 +260,8 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl |
|
|
|
dependencyDescriptor, shortcut, beanClass); |
|
|
|
dependencyDescriptor, shortcut, beanClass); |
|
|
|
} |
|
|
|
} |
|
|
|
ValueHolder argumentValue = argumentValues.getIndexedArgumentValue(i, null); |
|
|
|
ValueHolder argumentValue = argumentValues.getIndexedArgumentValue(i, null); |
|
|
|
resolved[i - startIndex] = resolveArgument(beanFactory, beanName, |
|
|
|
resolved[i - startIndex] = resolveArgument(registeredBean,autowiredBeans, |
|
|
|
autowiredBeans, parameter, dependencyDescriptor, argumentValue); |
|
|
|
dependencyDescriptor, argumentValue); |
|
|
|
} |
|
|
|
} |
|
|
|
registerDependentBeans(beanFactory, beanName, autowiredBeans); |
|
|
|
registerDependentBeans(beanFactory, beanName, autowiredBeans); |
|
|
|
return AutowiredArguments.of(resolved); |
|
|
|
return AutowiredArguments.of(resolved); |
|
|
|
@ -311,36 +307,21 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private Object resolveArgument(AbstractAutowireCapableBeanFactory beanFactory, |
|
|
|
private Object resolveArgument(RegisteredBean registeredBean, Set<String> autowiredBeans, |
|
|
|
String beanName, Set<String> autowiredBeans, MethodParameter parameter, |
|
|
|
|
|
|
|
DependencyDescriptor dependencyDescriptor, @Nullable ValueHolder argumentValue) { |
|
|
|
DependencyDescriptor dependencyDescriptor, @Nullable ValueHolder argumentValue) { |
|
|
|
|
|
|
|
|
|
|
|
TypeConverter typeConverter = beanFactory.getTypeConverter(); |
|
|
|
TypeConverter typeConverter = registeredBean.getBeanFactory().getTypeConverter(); |
|
|
|
Class<?> parameterType = parameter.getParameterType(); |
|
|
|
Class<?> parameterType = dependencyDescriptor.getMethodParameter().getParameterType(); |
|
|
|
if (argumentValue != null) { |
|
|
|
if (argumentValue != null) { |
|
|
|
return (!argumentValue.isConverted()) ? |
|
|
|
return (!argumentValue.isConverted()) ? |
|
|
|
typeConverter.convertIfNecessary(argumentValue.getValue(), parameterType) : |
|
|
|
typeConverter.convertIfNecessary(argumentValue.getValue(), parameterType) : |
|
|
|
argumentValue.getConvertedValue(); |
|
|
|
argumentValue.getConvertedValue(); |
|
|
|
} |
|
|
|
} |
|
|
|
try { |
|
|
|
try { |
|
|
|
try { |
|
|
|
return registeredBean.resolveAutowiredArgument(dependencyDescriptor, typeConverter, autowiredBeans); |
|
|
|
return beanFactory.resolveDependency(dependencyDescriptor, beanName, autowiredBeans, typeConverter); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (NoSuchBeanDefinitionException ex) { |
|
|
|
|
|
|
|
if (parameterType.isArray()) { |
|
|
|
|
|
|
|
return Array.newInstance(parameterType.getComponentType(), 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (CollectionFactory.isApproximableCollectionType(parameterType)) { |
|
|
|
|
|
|
|
return CollectionFactory.createCollection(parameterType, 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (CollectionFactory.isApproximableMapType(parameterType)) { |
|
|
|
|
|
|
|
return CollectionFactory.createMap(parameterType, 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
throw ex; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
catch (BeansException ex) { |
|
|
|
catch (BeansException ex) { |
|
|
|
throw new UnsatisfiedDependencyException(null, beanName, new InjectionPoint(parameter), ex); |
|
|
|
throw new UnsatisfiedDependencyException(null, registeredBean.getBeanName(), dependencyDescriptor, ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|