Interface ClassAnalyzer

  • All Known Implementing Classes:
    DefaultClassAnalyzer

    @Contract
    public interface ClassAnalyzer
    When HK2 automatically analyzes a class to find the constructor, fields, initializer methods and postConstruct and preDestroy methods it uses this service to analyze the class. This analyzer is only used for descriptors that are not pre-reified and which are not provided by factories.

    HK2 will provide a default implementation of this service (with the name "default"). However, individual descriptors may choose a different class analyzer should they so choose. All user supplied implementations of this service must have a name. Implementations of this service must not be ClassAnalyzers for themselves.

    The method ServiceLocator.setDefaultClassAnalyzerName(String) can be used to set the global ClassAnalyzer name that will be the name of the ClassAnalyzer used when the method Descriptor.getClassAnalysisName() returns null

    Implementations of ClassAnalyzer will be instantiated as soon as they are added to HK2 in order to avoid deadlocks and circular references. Therefore it is recommended that implementations of ClassAnalyzer make liberal use of Provider or IterableProvider when injecting dependent services so that these services are not instantiated when the ClassAnalyzer is created

    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String DEFAULT_IMPLEMENTATION_NAME
      The name of the default ClassAnalyzer service
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      <T> java.lang.reflect.Constructor<T> getConstructor​(java.lang.Class<T> clazz)
      Will return the constructor that it to be used when constructing this service
      <T> java.util.Set<java.lang.reflect.Field> getFields​(java.lang.Class<T> clazz)
      Will return the set of initializer fields to be used when initializing this service
      <T> java.util.Set<java.lang.reflect.Method> getInitializerMethods​(java.lang.Class<T> clazz)
      Will return the set of initializer method to be used when initializing this service
      <T> java.lang.reflect.Method getPostConstructMethod​(java.lang.Class<T> clazz)
      Will return the postConstruct method of the class
      <T> java.lang.reflect.Method getPreDestroyMethod​(java.lang.Class<T> clazz)
      Will return the preDestroy method of the class
    • Field Detail

      • DEFAULT_IMPLEMENTATION_NAME

        static final java.lang.String DEFAULT_IMPLEMENTATION_NAME
        The name of the default ClassAnalyzer service
        See Also:
        Constant Field Values
    • Method Detail

      • getConstructor

        <T> java.lang.reflect.Constructor<T> getConstructor​(java.lang.Class<T> clazz)
                                                     throws MultiException,
                                                            java.lang.NoSuchMethodException
        Will return the constructor that it to be used when constructing this service

        The default implementation will use the zero-arg constructor if no single constructor with Inject is found. Also will return any constructor that is covered by an InjectionResolver and the InjectionResolver.isConstructorParameterIndicator() is set to true

        Parameters:
        clazz - the non-null class to analyze
        Returns:
        The non-null constructor to use for creating this service
        Throws:
        MultiException - on an error when analyzing the class
        java.lang.NoSuchMethodException - if there was no available constructor
      • getInitializerMethods

        <T> java.util.Set<java.lang.reflect.Method> getInitializerMethods​(java.lang.Class<T> clazz)
                                                                   throws MultiException
        Will return the set of initializer method to be used when initializing this service

        The default implementation will return all methods marked with Inject or that have a parameter that is covered by an InjectionResolver and the InjectionResolver.isMethodParameterIndicator() is set to true. Also, any method that has a parameter marked with SubscribeTo will NOT be returned, as these methods are instead meant to be called when an event is fired

        Parameters:
        clazz - the non-null class to analyze
        Returns:
        A non-null but possibly empty set of initialization methods
        Throws:
        MultiException - on an error when analyzing the class
      • getFields

        <T> java.util.Set<java.lang.reflect.Field> getFields​(java.lang.Class<T> clazz)
                                                      throws MultiException
        Will return the set of initializer fields to be used when initializing this service

        The default implementation will return all fields marked with Inject or that have a parameter that is covered by an InjectionResolver

        Parameters:
        clazz - the non-null class to analyze
        Returns:
        A non-null but possibly empty set of initialization fields
        Throws:
        MultiException - on an error when analyzing the class
      • getPostConstructMethod

        <T> java.lang.reflect.Method getPostConstructMethod​(java.lang.Class<T> clazz)
                                                     throws MultiException
        Will return the postConstruct method of the class

        The default implementation will return the PostConstruct.postConstruct() method or the method annotated with PostConstruct

        Parameters:
        clazz - the non-null class to analyze
        Returns:
        A possibly null method representing the postConstruct method to call
        Throws:
        MultiException - on an error when analyzing the class
      • getPreDestroyMethod

        <T> java.lang.reflect.Method getPreDestroyMethod​(java.lang.Class<T> clazz)
                                                  throws MultiException
        Will return the preDestroy method of the class

        The default implementation will return the PreDestroy.preDestroy() method or the method annotated with PreDestroy

        Parameters:
        clazz - the non-null class to analyze
        Returns:
        A possibly null method representing the preDestroy method to call
        Throws:
        MultiException - on an error when analyzing the class