Class DependencyDescriptor

    • Constructor Detail

      • DependencyDescriptor

        public DependencyDescriptor​(MethodParameter methodParameter,
                                    boolean required)
        Create a new descriptor for a method or constructor parameter. Considers the dependency as 'eager'.
        Parameters:
        methodParameter - the MethodParameter to wrap
        required - whether the dependency is required
      • DependencyDescriptor

        public DependencyDescriptor​(MethodParameter methodParameter,
                                    boolean required,
                                    boolean eager)
        Create a new descriptor for a method or constructor parameter.
        Parameters:
        methodParameter - the MethodParameter to wrap
        required - whether the dependency is required
        eager - whether this dependency is 'eager' in the sense of eagerly resolving potential target beans for type matching
      • DependencyDescriptor

        public DependencyDescriptor​(Field field,
                                    boolean required)
        Create a new descriptor for a field. Considers the dependency as 'eager'.
        Parameters:
        field - the field to wrap
        required - whether the dependency is required
      • DependencyDescriptor

        public DependencyDescriptor​(Field field,
                                    boolean required,
                                    boolean eager)
        Create a new descriptor for a field.
        Parameters:
        field - the field to wrap
        required - whether the dependency is required
        eager - whether this dependency is 'eager' in the sense of eagerly resolving potential target beans for type matching
    • Method Detail

      • isRequired

        public boolean isRequired()
        Return whether this dependency is required.
      • isEager

        public boolean isEager()
        Return whether this dependency is 'eager' in the sense of eagerly resolving potential target beans for type matching.
      • resolveNotUnique

        public Object resolveNotUnique​(Class<?> type,
                                       Map<String,​Object> matchingBeans)
                                throws BeansException
        Resolve the specified not-unique scenario: by default, throwing a NoUniqueBeanDefinitionException.

        Subclasses may override this to select one of the instances or to opt out with no result at all through returning null.

        Parameters:
        type - the requested bean type
        matchingBeans - a map of bean names and corresponding bean instances which have been pre-selected for the given type (qualifiers etc already applied)
        Returns:
        a bean instance to proceed with, or null for none
        Throws:
        BeansException - in case of the not-unique scenario being fatal
        Since:
        4.3
      • resolveShortcut

        public Object resolveShortcut​(BeanFactory beanFactory)
                               throws BeansException
        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 InjectionPoint exposure etc.

        Parameters:
        beanFactory - the associated factory
        Returns:
        the shortcut result if any, or null if none
        Throws:
        BeansException - if the shortcut could not be obtained
        Since:
        4.3.1
      • resolveCandidate

        public Object resolveCandidate​(String beanName,
                                       Class<?> requiredType,
                                       BeanFactory beanFactory)
                                throws BeansException
        Resolve the specified bean name, as a candidate result of the matching algorithm for this dependency, to a bean instance from the given factory.

        The default implementation calls BeanFactory.getBean(String). Subclasses may provide additional arguments or other customizations.

        Parameters:
        beanName - the bean name, as a candidate result for this dependency
        requiredType - the expected type of the bean (as an assertion)
        beanFactory - the associated factory
        Returns:
        the bean instance (never null)
        Throws:
        BeansException - if the bean could not be obtained
        Since:
        4.3.2
        See Also:
        BeanFactory.getBean(String)
      • setContainingClass

        public void setContainingClass​(Class<?> containingClass)
        Optionally set the concrete class that contains this dependency. This may differ from the class that declares the parameter/field in that it may be a subclass thereof, potentially substituting type variables.
        Since:
        4.0
      • fallbackMatchAllowed

        public boolean fallbackMatchAllowed()
        Return whether a fallback match is allowed.

        This is false by default but may be overridden to return true in order to suggest to an AutowireCandidateResolver that a fallback match is acceptable as well.

        Since:
        4.0
      • initParameterNameDiscovery

        public void initParameterNameDiscovery​(ParameterNameDiscoverer parameterNameDiscoverer)
        Initialize parameter name discovery for the underlying method parameter, if any.

        This method does not actually try to retrieve the parameter name at this point; it just allows discovery to happen when the application calls getDependencyName() (if ever).

      • getDependencyName

        public String getDependencyName()
        Determine the name of the wrapped parameter/field.
        Returns:
        the declared name (never null)
      • getDependencyType

        public Class<?> getDependencyType()
        Determine the declared (non-generic) type of the wrapped parameter/field.
        Returns:
        the declared type (never null)
      • getCollectionType

        @Deprecated
        public Class<?> getCollectionType()
        Deprecated.
        as of 4.3.6, in favor of direct ResolvableType usage
        Determine the generic element type of the wrapped Collection parameter/field, if any.
        Returns:
        the generic type, or null if none
      • getMapKeyType

        @Deprecated
        public Class<?> getMapKeyType()
        Deprecated.
        as of 4.3.6, in favor of direct ResolvableType usage
        Determine the generic key type of the wrapped Map parameter/field, if any.
        Returns:
        the generic type, or null if none
      • getMapValueType

        @Deprecated
        public Class<?> getMapValueType()
        Deprecated.
        as of 4.3.6, in favor of direct ResolvableType usage
        Determine the generic value type of the wrapped Map parameter/field, if any.
        Returns:
        the generic type, or null if none