Class AbstractInjectionPointDependencyResolver

  • All Implemented Interfaces:
    InjectionPointDependencyResolver, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactoryAware
    Direct Known Subclasses:
    AnnotatedInjectionPointDependencyResolver, BeanMethodInjectionPointDependencyResolver, ConstructionInjectionPointDependencyResolver

    public abstract class AbstractInjectionPointDependencyResolver
    extends java.lang.Object
    implements InjectionPointDependencyResolver, org.springframework.beans.factory.BeanFactoryAware
    Abstract base class for implementing InjectionPointDependencyResolver.

    This class provides a foundation for resolving dependencies at injection points within Spring-managed beans. It handles common tasks such as bean factory awareness, dependency type resolution, and logging using the Logger interface.

    Key Responsibilities

    • Tracking and resolving dependencies based on injection points (fields, methods, constructors).
    • Filtering resolvable dependency types via the configured ResolvableDependencyTypeFilter.
    • Providing consistent logging capabilities through the injected logger.
    • Supporting custom resolution logic by allowing subclasses to implement specific strategies.

    Example Usage

    Basic Implementation

    
     public class MyDependencyResolver extends AbstractInjectionPointDependencyResolver {
         // Custom implementation details here
     }
     

    Resolving Dependencies from a Field

    
     public void resolve(Field field, ConfigurableListableBeanFactory beanFactory, Set<String> dependentBeanNames) {
         String dependentBeanName = resolveDependentBeanNameByName(field, beanFactory);
         if (dependentBeanName == null) {
             resolveDependentBeanNamesByType(field::getGenericType, beanFactory, dependentBeanNames);
         } else {
             dependentBeanNames.add(dependentBeanName);
         }
     }
     

    Resolving Dependencies from a Method Parameter

    
     public void resolve(Parameter parameter, ConfigurableListableBeanFactory beanFactory, Set<String> dependentBeanNames) {
         String dependentBeanName = resolveDependentBeanNameByName(parameter, beanFactory);
         if (dependentBeanName == null) {
             resolveDependentBeanNamesByType(parameter::getParameterizedType, beanFactory, dependentBeanNames);
         } else {
             dependentBeanNames.add(dependentBeanName);
         }
     }
     
    Since:
    1.0.0
    Author:
    Mercy
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void resolve​(java.lang.reflect.Constructor constructor, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory, java.util.Set<java.lang.String> dependentBeanNames)
      Resolve the bean names as the dependencies from the specified constructor
      void resolve​(java.lang.reflect.Field field, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory, java.util.Set<java.lang.String> dependentBeanNames)
      Resolve the bean names as the dependencies from the specified field
      void resolve​(java.lang.reflect.Method method, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory, java.util.Set<java.lang.String> dependentBeanNames)
      Resolve the bean names as the dependencies from the specified method
      void resolve​(java.lang.reflect.Parameter parameter, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory, java.util.Set<java.lang.String> dependentBeanNames)
      Resolve the bean names as the dependencies from the specified parameter
      protected java.lang.String resolveDependentBeanNameByName​(java.lang.reflect.Field field, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)  
      protected java.lang.String resolveDependentBeanNameByName​(java.lang.reflect.Parameter parameter, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)  
      protected java.lang.String resolveDependentBeanNameByName​(org.springframework.beans.factory.config.DependencyDescriptor dependencyDescriptor)  
      protected void resolveDependentBeanNamesByType​(java.util.function.Supplier<java.lang.reflect.Type> typeSupplier, org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory, java.util.Set<java.lang.String> dependentBeanNames)  
      protected java.lang.Class<?> resolveDependentType​(java.lang.reflect.Type type)  
      void setBeanFactory​(org.springframework.beans.factory.BeanFactory beanFactory)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • logger

        protected final io.microsphere.logging.Logger logger
      • autowireCandidateResolver

        @Nonnull
        protected org.springframework.beans.factory.support.AutowireCandidateResolver autowireCandidateResolver
    • Constructor Detail

      • AbstractInjectionPointDependencyResolver

        public AbstractInjectionPointDependencyResolver()
    • Method Detail

      • resolve

        public void resolve​(java.lang.reflect.Field field,
                            org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,
                            java.util.Set<java.lang.String> dependentBeanNames)
        Description copied from interface: InjectionPointDependencyResolver
        Resolve the bean names as the dependencies from the specified field
        Specified by:
        resolve in interface InjectionPointDependencyResolver
        Parameters:
        field - the field may be an injection point
        beanFactory - ConfigurableListableBeanFactory
        dependentBeanNames - the dependent bean names to be manipulated
      • resolve

        public void resolve​(java.lang.reflect.Method method,
                            org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,
                            java.util.Set<java.lang.String> dependentBeanNames)
        Description copied from interface: InjectionPointDependencyResolver
        Resolve the bean names as the dependencies from the specified method
        Specified by:
        resolve in interface InjectionPointDependencyResolver
        Parameters:
        method - the method may be an injection point
        beanFactory - ConfigurableListableBeanFactory
        dependentBeanNames - the dependent bean names to be manipulated
      • resolve

        public void resolve​(java.lang.reflect.Constructor constructor,
                            org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,
                            java.util.Set<java.lang.String> dependentBeanNames)
        Description copied from interface: InjectionPointDependencyResolver
        Resolve the bean names as the dependencies from the specified constructor
        Specified by:
        resolve in interface InjectionPointDependencyResolver
        Parameters:
        constructor - the constructor may be an injection point
        beanFactory - ConfigurableListableBeanFactory
        dependentBeanNames - the dependent bean names to be manipulated
      • resolve

        public void resolve​(java.lang.reflect.Parameter parameter,
                            org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,
                            java.util.Set<java.lang.String> dependentBeanNames)
        Description copied from interface: InjectionPointDependencyResolver
        Resolve the bean names as the dependencies from the specified parameter
        Specified by:
        resolve in interface InjectionPointDependencyResolver
        Parameters:
        parameter - the specified parameter of a method or constructor was annotated by the annotation
        beanFactory - ConfigurableListableBeanFactory
        dependentBeanNames - the dependent bean names to be manipulated
      • setBeanFactory

        public void setBeanFactory​(org.springframework.beans.factory.BeanFactory beanFactory)
                            throws org.springframework.beans.BeansException
        Specified by:
        setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
        Throws:
        org.springframework.beans.BeansException
      • resolveDependentBeanNameByName

        protected java.lang.String resolveDependentBeanNameByName​(java.lang.reflect.Field field,
                                                                  org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
      • resolveDependentBeanNameByName

        protected java.lang.String resolveDependentBeanNameByName​(java.lang.reflect.Parameter parameter,
                                                                  org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
      • resolveDependentBeanNameByName

        protected java.lang.String resolveDependentBeanNameByName​(org.springframework.beans.factory.config.DependencyDescriptor dependencyDescriptor)
      • resolveDependentBeanNamesByType

        protected void resolveDependentBeanNamesByType​(java.util.function.Supplier<java.lang.reflect.Type> typeSupplier,
                                                       org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,
                                                       java.util.Set<java.lang.String> dependentBeanNames)
      • resolveDependentType

        protected java.lang.Class<?> resolveDependentType​(java.lang.reflect.Type type)