Package org.apache.commons.configuration2.beanutils

## Class DefaultBeanFactory

- java.lang.Object
- - org.apache.commons.configuration2.beanutils.DefaultBeanFactory

- All Implemented Interfaces:
    `BeanFactory`

      public class DefaultBeanFactory
      extends Object
      implements BeanFactory

  The default implementation of the `BeanFactory` interface.

  This class creates beans of arbitrary types using reflection. Each time the `createBean()` method is invoked, a new bean instance is created. A default bean class is not supported.

  For data type conversions (which may be needed before invoking methods through reflection to ensure that the current parameters match their declared types) a `ConversionHandler` object is used. An instance of this class can be passed to the constructor. Alternatively, a default `ConversionHandler` instance is used.

  An instance of this factory class will be set as the default bean factory for the `BeanHelper` class. This means that if not bean factory is specified in a `BeanDeclaration`, this default instance will be used.

  Since:
    1.3

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static DefaultBeanFactory` | `INSTANCE` | Stores the default instance of this class.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DefaultBeanFactory()` | Constructs a new instance of `DefaultBeanFactory` using a default `ConversionHandler`.
    `DefaultBeanFactory​(ConversionHandler convHandler)` | Constructs a new instance of `DefaultBeanFactory` using the specified `ConversionHandler` for data type conversions.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Object` | `createBean​(BeanCreationContext bcc)` | Creates a new bean instance.
    `protected Object` | `createBeanInstance​(BeanCreationContext bcc)` | Creates the bean instance.
    `protected static <T> Constructor<T>` | `findMatchingConstructor​(Class<T> beanClass, BeanDeclaration data)` | Evaluates constructor arguments in the specified `BeanDeclaration` and tries to find a unique matching constructor.
    `ConversionHandler` | `getConversionHandler()` | Gets the `ConversionHandler` used by this object.
    `Class<?>` | `getDefaultBeanClass()` | Gets the default bean class used by this factory.
    `protected void` | `initBeanInstance​(Object bean, BeanCreationContext bcc)` | Initializes the newly created bean instance.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### INSTANCE

          public static final DefaultBeanFactory INSTANCE

      Stores the default instance of this class.

  - ### Constructor Detail

    - #### DefaultBeanFactory

          public DefaultBeanFactory()

      Constructs a new instance of `DefaultBeanFactory` using a default `ConversionHandler`.

    - #### DefaultBeanFactory

          public DefaultBeanFactory​(ConversionHandler convHandler)

      Constructs a new instance of `DefaultBeanFactory` using the specified `ConversionHandler` for data type conversions.
      Parameters:
        `convHandler` - the `ConversionHandler`; can be null, then a default handler is used
      Since:
        2.0

  - ### Method Detail

    - #### getConversionHandler

          public ConversionHandler getConversionHandler()

      Gets the `ConversionHandler` used by this object.
      Returns:
        the `ConversionHandler`
      Since:
        2.0

    - #### createBean

          public Object createBean​(BeanCreationContext bcc)
                            throws Exception

      Creates a new bean instance. This implementation delegates to the protected methods `createBeanInstance()` and `initBeanInstance()` for creating and initializing the bean. This makes it easier for derived classes that need to change specific functionality of the base class.
      Specified by:
        `createBean` in interface `BeanFactory`
      Parameters:
        `bcc` - the context object defining the bean to be created
      Returns:
        the new bean instance
      Throws:
        `Exception` - if an error occurs

    - #### getDefaultBeanClass

          public Class<?> getDefaultBeanClass()

      Gets the default bean class used by this factory. This is always null for this implementation.
      Specified by:
        `getDefaultBeanClass` in interface `BeanFactory`
      Returns:
        the default bean class

    - #### createBeanInstance

          protected Object createBeanInstance​(BeanCreationContext bcc)
                                       throws Exception

      Creates the bean instance. This method is called by `createBean()`. It uses reflection to create a new instance of the specified class.
      Parameters:
        `bcc` - the context object defining the bean to be created
      Returns:
        the new bean instance
      Throws:
        `Exception` - if an error occurs

    - #### initBeanInstance

          protected void initBeanInstance​(Object bean,
                                          BeanCreationContext bcc)
                                   throws Exception

      Initializes the newly created bean instance. This method is called by `createBean()`. It calls the `initBean()` method of the context object for performing the initialization.
      Parameters:
        `bean` - the newly created bean instance
        `bcc` - the context object defining the bean to be created
      Throws:
        `Exception` - if an error occurs

    - #### findMatchingConstructor

          protected static <T> Constructor<T> findMatchingConstructor​(Class<T> beanClass,
                                                                      BeanDeclaration data)

      Evaluates constructor arguments in the specified `BeanDeclaration` and tries to find a unique matching constructor. If this is not possible, an exception is thrown. Note: This method is intended to be used by concrete `BeanFactory` implementations and not by client code.
      Type Parameters:
        `T` - the type of the bean to be created
      Parameters:
        `beanClass` - the class of the bean to be created
        `data` - the current `BeanDeclaration`
      Returns:
        the single matching constructor
      Throws:
        `ConfigurationRuntimeException` - if no single matching constructor can be found
        `NullPointerException` - if the bean class or bean declaration are null