Class Invocation

  • Direct Known Subclasses:
    ConstructorInvocation, MethodInvocation, SetPropertyInvocation

    public class Invocation
    extends Object

    A base class for (method or constructor) invocations.

    This class allows the definition of important data that is required for invoking a method using reflection. Especially the parameter types and the parameter values can be specified. The parameter values are provided as Dependency objects, so they can refer to other beans defined in a BeanStore.

    The main use case for Invocation objects is the creation and initialization of beans performed by the dependency injection framework: At first a bean has to be created by invoking one of its constructors. After that some initialization methods may be called. In both cases the parameters for the calls have to be specified (which can be either constant values or references to other beans).

    This base provides common functionality related to the management of the invocation parameters. There will be concrete sub classes implementing specific invocations of methods or constructors.

    Version:
    $Id: Invocation.java 207 2012-02-09 07:30:13Z oheger $
    Author:
    Oliver Heger
    • Constructor Detail

      • Invocation

        protected Invocation​(ClassDescription targetClass,
                             ClassDescription[] paramTypes,
                             Dependency... paramValues)
        Creates a new instance of Invocation and initializes it with information about the call parameters. To perform an invocation the class has to know the current parameter values and (at least partly) the data types of these values. From this information the signature of the method to call is derived. The array with the parameter types can have null elements if the corresponding parameter types are unknown; it can even be null at all if no information about data types is available. If it is not null, its length must be the same as the length of the array with the parameter values.
        Parameters:
        targetClass - description of the class, on which the method is to be invoked
        paramTypes - an array with the parameter type descriptions
        paramValues - the current parameter values (defined as Dependency objects); this array must not contain null elements
        Throws:
        IllegalArgumentException - if the length of the parameter types array does not match the length of the parameter values array or if the values array contains null elements
    • Method Detail

      • getTargetClass

        public ClassDescription getTargetClass()
        Returns the target class of this invocation. This is the class, on which the method or constructor is to be invoked. A target class may not be required for all cases, e.g. for non-static method invocations it can be determined from the target instance.
        Returns:
        the target class of the invocation
      • getParameterTypes

        public ClassDescription[] getParameterTypes()
        Returns an array with the types of the parameters of the invocation. Note that the array returned here is never null, even if null was passed to the constructor. The returned array may contain null elements for parameters where the type information is lacking.
        Returns:
        an array with the parameter types
      • getParameterDependencies

        public List<Dependency> getParameterDependencies()
        Returns the Dependency objects defining the current parameter values.
        Returns:
        a list with the Dependency objects for the parameter values
      • isTypeInfoComplete

        public boolean isTypeInfoComplete()
        Returns a flag whether the data types of all method parameters are known. If this is the case, the signature of the method to be called can be exactly specified. Otherwise the signature has to be derived from the data types of the current parameters.
        Returns:
        a flag whether information about the parameter types is complete
      • getResolvedParameters

        public Object[] getResolvedParameters​(DependencyProvider depProvider)
        Returns an array with the resolved parameters. This method iterates over the parameter dependencies and tries to resolve them using the specified DependencyProvider. An array with the resulting beans is returned. If no parameters are specified (i.e. for invocations of methods that do not have arguments), the return value is null.
        Parameters:
        depProvider - the dependency provider (must not be null)
        Returns:
        an array with the resolved parameter values (can be null)
        Throws:
        InjectionException - if a dependency cannot be resolved
        IllegalArgumentException - if the passed in dependency provider is null
      • getParameterClasses

        public Class<?>[] getParameterClasses​(DependencyProvider depProvider)
        Returns an array with the concrete parameter classes. This method converts the internally stored ClassDescription objects into Class objects.
        Parameters:
        depProvider - the dependency provider for resolving the classes
        Returns:
        an array with the parameter classes
        Throws:
        InjectionException - if a class cannot be resolved
      • toString

        public String toString()
        Returns a string representation of this object. The returned string will contain information about this invocation (including the class name, the target class name, the parameters, and further information provided by sub classes). This implementation will print the concrete class name, followed by an opening square bracket. Then invocationInfoToString(), and parametersToString() are called. Finally a closing square bracket is output.
        Overrides:
        toString in class Object
        Returns:
        a string for this object
      • invocationInfoToString

        protected void invocationInfoToString​(StringBuilder buf)
        Creates a string with additional information about this invocation. This method is called by the default toString() implementation. It adds the target class to the buffer if it is defined.
        Parameters:
        buf - the target buffer
      • parametersToString

        protected void parametersToString​(StringBuilder buf)
        Creates a string representation of the current parameter values. This implementation iterates over all parameter dependencies and invokes their toString() method. It is called by the toString() method.
        Parameters:
        buf - the target buffer
      • checkDependencyProvider

        protected static void checkDependencyProvider​(DependencyProvider depProvider)
        Checks whether a valid DependencyProvider has been specified.
        Parameters:
        depProvider - the provider to be checked
        Throws:
        IllegalArgumentException - if the DependencyProvider is undefined
        Since:
        1.1