Performs constructor resolution through argument matching.
autowireConstructor, instantiateUsingFactoryMethod, resolveConstructorOrFactoryMethod, AbstractAutowireCapableBeanFactory
| Modifier and Type | Class and Description |
|---|---|
| private static class | ConstructorResolver.ArgumentsHolder
Private inner class for holding argument combinations. |
| private static class | ConstructorResolver.ConstructorDependencyDescriptor
DependencyDescriptor marker for constructor arguments, for differentiating between a provided DependencyDescriptor instance and an internally built DependencyDescriptor for autowiring purposes. |
| private static class | ConstructorResolver.ConstructorPropertiesChecker
Delegate for checking Java's |
| private static enum |
| Modifier and Type | Field and Description |
|---|---|
| private final AbstractAutowireCapableBeanFactory | |
| private static final NamedThreadLocal | |
| private static final Object[] | |
| private final Log |
| Access | Constructor and Description |
|---|---|
| public | ConstructorResolver(AbstractAutowireCapableBeanFactory
the BeanFactory to work with beanFactory)Create a new ConstructorResolver for the given factory and instantiation strategy. |
| Modifier and Type | Method and Description |
|---|---|
| public BeanWrapper | Returns: a BeanWrapper for the new instancethe name of the bean beanName, RootBeanDefinition the merged bean definition for the bean mbd, Constructor<?>[] chosen candidate constructors (or chosenCtors, Object[] null if none)argument values passed in programmatically via the getBean method,
or explicitArgs)null if none (-> use constructor argument values from bean definition)"autowire constructor" (with constructor arguments by type) behavior. |
| private ConstructorResolver. | createArgumentArray(String beanName, RootBeanDefinition mbd, ConstructorArgumentValues resolvedValues, BeanWrapper bw, Class<?>[] paramTypes, String[] paramNames, Executable executable, boolean autowiring, boolean fallback)
Create an array of arguments to invoke a constructor or factory method, given the resolved constructor argument values. |
| private ResolvableType | determineParameterValueType(RootBeanDefinition mbd, ConstructorArgumentValues.
|
| private List | |
| pack-priv static Constructor | determinePreferredConstructors(Class<?> clazz)
See |
| private ResolvableType | |
| private ResolvableType | |
| private Method[] | getCandidateMethods(Class<?> factoryClass, RootBeanDefinition mbd)
Retrieve all candidate methods for the given class, considering
the |
| private Class | |
| private Constructor | |
| private Object | instantiate(String beanName, RootBeanDefinition mbd, Constructor<?> constructorToUse, Object[] argsToUse)
|
| private Object | instantiate(String beanName, RootBeanDefinition mbd, Object factoryBean, Method factoryMethod, Object[] args)
|
| public BeanWrapper | Returns: a BeanWrapper for the new instancethe name of the bean beanName, RootBeanDefinition the merged bean definition for the bean mbd, Object[] argument values passed in programmatically via the getBean
method, or explicitArgs)null if none (-> use constructor argument values from bean definition)Instantiate the bean using a named factory method. |
| private Predicate | |
| private boolean | isMatch(ResolvableType parameterType, ResolvableType valueType, ConstructorResolver.
|
| private boolean | |
| private Predicate | |
| private boolean | |
| private Predicate | Returns: a predicate to indicate a fallback match for a String to Class parameterthe type of the value valueType)Return a |
| private boolean | match(List<ResolvableType> parameterTypes, List<ResolvableType> valueTypes, ConstructorResolver.
|
| private void | |
| pack-priv Object | resolveAutowiredArgument(DependencyDescriptor descriptor, Class<?> paramType, String beanName, Set<String> autowiredBeanNames, TypeConverter typeConverter, boolean fallback)
Resolve the specified argument which is supposed to be autowired. |
| private Constructor | resolveConstructor(String beanName, RootBeanDefinition mbd, Supplier<ResolvableType> beanType, List<ResolvableType> valueTypes)
|
| private int | resolveConstructorArguments(String beanName, RootBeanDefinition mbd, BeanWrapper bw, ConstructorArgumentValues cargs, ConstructorArgumentValues resolvedValues)
Resolve the constructor arguments for this bean into the resolvedValues object. |
| public Executable | |
| private Method | |
| private Method | resolveFactoryMethod(List<Method> executables, Function<Method, List<ResolvableType>> parameterTypesFactory, List<ResolvableType> valueTypes)
|
| public void | resolveFactoryMethodIfPossible(RootBeanDefinition
the bean definition to check mbd)Resolve the factory method in the specified bean definition, if possible. |
| private Object[] | resolvePreparedArguments(String beanName, RootBeanDefinition mbd, BeanWrapper bw, Executable executable, Object[] argsToResolve)
Resolve the prepared arguments stored in the given bean definition. |
| pack-priv static InjectionPoint | |
| private void | setShortcutIfPossible(ConstructorResolver.
|
| private Predicate | |
| private Predicate | valueOrCollection(ResolvableType valueType, Function<ResolvableType, Predicate<ResolvableType>> predicateProvider)
|
| beanFactory | back to summary |
|---|---|
| private final AbstractAutowireCapableBeanFactory beanFactory | |
| currentInjectionPoint | back to summary |
|---|---|
| private static final NamedThreadLocal<InjectionPoint> currentInjectionPoint | |
| EMPTY_ARGS | back to summary |
|---|---|
| private static final Object[] EMPTY_ARGS | |
| logger | back to summary |
|---|---|
| private final Log logger | |
| ConstructorResolver | back to summary |
|---|---|
| public ConstructorResolver(AbstractAutowireCapableBeanFactory beanFactory) Create a new ConstructorResolver for the given factory and instantiation strategy.
| |
| autowireConstructor | back to summary |
|---|---|
| public BeanWrapper autowireConstructor(String beanName, RootBeanDefinition mbd, Constructor<?>[] chosenCtors, Object[] explicitArgs) "autowire constructor" (with constructor arguments by type) behavior. Also applied if explicit constructor argument values are specified.
| |
| createArgumentArray | back to summary |
|---|---|
| private ConstructorResolver. Create an array of arguments to invoke a constructor or factory method, given the resolved constructor argument values. | |
| determineParameterValueType | back to summary |
|---|---|
| private ResolvableType determineParameterValueType(RootBeanDefinition mbd, ConstructorArgumentValues. | |
| determineParameterValueTypes | back to summary |
|---|---|
| private List | |
| determinePreferredConstructors | back to summary |
|---|---|
| pack-priv static Constructor See
| |
| extractElementType | back to summary |
|---|---|
| private ResolvableType extractElementType(ResolvableType parameterType) | |
| getBeanType | back to summary |
|---|---|
| private ResolvableType getBeanType(String beanName, RootBeanDefinition mbd) | |
| getCandidateMethods | back to summary |
|---|---|
| private Method[] getCandidateMethods(Class<?> factoryClass, RootBeanDefinition mbd) Retrieve all candidate methods for the given class, considering
the | |
| getFactoryBeanClass | back to summary |
|---|---|
private Class
| |
| getUserDeclaredConstructor | back to summary |
|---|---|
| private Constructor | |
| instantiate | back to summary |
|---|---|
| private Object instantiate(String beanName, RootBeanDefinition mbd, Constructor<?> constructorToUse, Object[] argsToUse) | |
| instantiate | back to summary |
|---|---|
| private Object instantiate(String beanName, RootBeanDefinition mbd, Object factoryBean, Method factoryMethod, Object[] args) | |
| instantiateUsingFactoryMethod | back to summary |
|---|---|
| public BeanWrapper instantiateUsingFactoryMethod(String beanName, RootBeanDefinition mbd, Object[] explicitArgs) Instantiate the bean using a named factory method. The method may be static, if the bean definition parameter specifies a class, rather than a "factory-bean", or an instance variable on a factory object itself configured using Dependency Injection. Implementation requires iterating over the static or instance methods with the name specified in the RootBeanDefinition (the method may be overloaded) and trying to match with the parameters. We don't have the types attached to constructor args, so trial and error is the only way to go here. The explicitArgs array may contain argument values passed in programmatically via the corresponding getBean method.
| |
| isAssignable | back to summary |
|---|---|
| private Predicate | |
| isMatch | back to summary |
|---|---|
| private boolean isMatch(ResolvableType parameterType, ResolvableType valueType, ConstructorResolver. | |
| isParamMismatch | back to summary |
|---|---|
| private boolean isParamMismatch(Method uniqueCandidate, Method candidate) | |
| isSimpleValueType | back to summary |
|---|---|
| private Predicate | |
| isStaticCandidate | back to summary |
|---|---|
| private boolean isStaticCandidate(Method method, Class<?> factoryClass) | |
| isStringForClassFallback | back to summary |
|---|---|
| private Predicate Return a
| |
| match | back to summary |
|---|---|
| private boolean match(List<ResolvableType> parameterTypes, List<ResolvableType> valueTypes, ConstructorResolver. | |
| registerDependentBeans | back to summary |
|---|---|
| private void registerDependentBeans(Executable executable, String beanName, Set<String> autowiredBeanNames) | |
| resolveAutowiredArgument | back to summary |
|---|---|
| pack-priv Object resolveAutowiredArgument(DependencyDescriptor descriptor, Class<?> paramType, String beanName, Set<String> autowiredBeanNames, TypeConverter typeConverter, boolean fallback) Resolve the specified argument which is supposed to be autowired.
| |
| resolveConstructor | back to summary |
|---|---|
private Constructor
| |
| resolveConstructorArguments | back to summary |
|---|---|
| private int resolveConstructorArguments(String beanName, RootBeanDefinition mbd, BeanWrapper bw, ConstructorArgumentValues cargs, ConstructorArgumentValues resolvedValues) Resolve the constructor arguments for this bean into the resolvedValues object. This may involve looking up other beans. This method is also used for handling invocations of static factory methods. | |
| resolveConstructorOrFactoryMethod | back to summary |
|---|---|
| public Executable resolveConstructorOrFactoryMethod(String beanName, RootBeanDefinition mbd) | |
| resolveFactoryMethod | back to summary |
|---|---|
private Method resolveFactoryMethod(String beanName, RootBeanDefinition mbd, List<ResolvableType> valueTypes)
| |
| resolveFactoryMethod | back to summary |
|---|---|
private Method resolveFactoryMethod(List<Method> executables, Function<Method, List<ResolvableType>> parameterTypesFactory, List<ResolvableType> valueTypes)
| |
| resolveFactoryMethodIfPossible | back to summary |
|---|---|
| public void resolveFactoryMethodIfPossible(RootBeanDefinition mbd) Resolve the factory method in the specified bean definition, if possible.
| |
| resolvePreparedArguments | back to summary |
|---|---|
| private Object[] resolvePreparedArguments(String beanName, RootBeanDefinition mbd, BeanWrapper bw, Executable executable, Object[] argsToResolve) Resolve the prepared arguments stored in the given bean definition. | |
| setCurrentInjectionPoint | back to summary |
|---|---|
| pack-priv static InjectionPoint setCurrentInjectionPoint(InjectionPoint injectionPoint) | |
| setShortcutIfPossible | back to summary |
|---|---|
| private void setShortcutIfPossible(ConstructorResolver. | |
| typeConversionFallback | back to summary |
|---|---|
| private Predicate | |
| valueOrCollection | back to summary |
|---|---|
| private Predicate | |
| Modifier and Type | Field and Description |
|---|---|
| public final Object[] | |
| public final Object[] | |
| public final Object[] | |
| public boolean |
| Access | Constructor and Description |
|---|---|
| public | |
| public |
| Modifier and Type | Method and Description |
|---|---|
| public int | |
| public int | |
| public void |
| arguments | back to summary |
|---|---|
| public final Object[] arguments | |
| preparedArguments | back to summary |
|---|---|
| public final Object[] preparedArguments | |
| rawArguments | back to summary |
|---|---|
| public final Object[] rawArguments | |
| resolveNecessary | back to summary |
|---|---|
| public boolean resolveNecessary | |
| ArgumentsHolder | back to summary |
|---|---|
| public ArgumentsHolder(int size) | |
| ArgumentsHolder | back to summary |
|---|---|
| public ArgumentsHolder(Object[] args) | |
| getAssignabilityWeight | back to summary |
|---|---|
| public int getAssignabilityWeight(Class<?>[] paramTypes) | |
| getTypeDifferenceWeight | back to summary |
|---|---|
| public int getTypeDifferenceWeight(Class<?>[] paramTypes) | |
| storeCache | back to summary |
|---|---|
| public void storeCache(RootBeanDefinition mbd, Executable constructorOrFactoryMethod) | |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public boolean | |
| public Object | resolveShortcut(BeanFactory
the associated factory beanFactory)Overrides org. |
| public void |
| shortcut | back to summary |
|---|---|
| private volatile String shortcut
| |
| ConstructorDependencyDescriptor | back to summary |
|---|---|
| public ConstructorDependencyDescriptor(MethodParameter methodParameter, boolean required) | |
| hasShortcut | back to summary |
|---|---|
| public boolean hasShortcut() | |
| resolveShortcut | back to summary |
|---|---|
| public Object resolveShortcut(BeanFactory beanFactory) Overrides org. Doc from org. Resolve a shortcut for this dependency against the given factory, for example taking some pre-resolved information into account. The resolution algorithm will first attempt to resolve a shortcut through this
method before going into the regular type matching algorithm across all beans.
Subclasses may override this method to improve resolution performance based on
pre-cached information while still receiving
| |
| setShortcut | back to summary |
|---|---|
| public void setShortcut(String shortcut) | |
ConstructorProperties annotation.
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static String[] |
| ConstructorPropertiesChecker | back to summary |
|---|---|
| private ConstructorPropertiesChecker() | |
| evaluate | back to summary |
|---|---|
public static String[] evaluate(Constructor<?> candidate, int paramCount)
| |
| Modifier and Type | Field and Description |
|---|---|
| public static final ConstructorResolver. | |
| public static final ConstructorResolver. | |
| public static final ConstructorResolver. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static ConstructorResolver. | |
| public static ConstructorResolver. |
| ASSIGNABLE_ELEMENT | back to summary |
|---|---|
| public static final ConstructorResolver. | |
| NONE | back to summary |
|---|---|
| public static final ConstructorResolver. | |
| TYPE_CONVERSION | back to summary |
|---|---|
| public static final ConstructorResolver. | |
| FallbackMode | back to summary |
|---|---|
| private FallbackMode() | |
| valueOf | back to summary |
|---|---|
| public static ConstructorResolver. | |
| values | back to summary |
|---|---|
| public static ConstructorResolver. | |