org.apache.commons.configuration.beanutils

Class BeanHelper

public class BeanHelper extends Object

A helper class for creating bean instances that are defined in configuration files.

This class provides static utility methods related to bean creation operations. These methods simplify such operations because a client need not deal with all involved interfaces. Usually, if a bean declaration has already been obtained, a single method call is necessary to create a new bean instance.

This class also supports the registration of custom bean factories. Implementations of the BeanFactory interface can be registered under a symbolic name using the registerBeanFactory() method. In the configuration file the name of the bean factory can be specified in the bean declaration. Then this factory will be used to create the bean.

Since: 1.3

Version: $Id: BeanHelper.java 508152 2007-02-15 21:16:37Z oheger $

Author: Oliver Heger

Field Summary
static MapbeanFactories
Stores a map with the registered bean factories.
static BeanFactorydefaultBeanFactory
Stores the default bean factory, which will be used if no other factory is provided.
Constructor Summary
BeanHelper()
Private constructor, so no instances can be created.
Method Summary
static ObjectcreateBean(BeanDeclaration data, Class defaultClass, Object param)
The main method for creating and initializing beans from a configuration.
static ObjectcreateBean(BeanDeclaration data, Class defaultClass)
Returns a bean instance for the specified declaration.
static ObjectcreateBean(BeanDeclaration data)
Returns a bean instance for the specified declaration.
static BeanFactoryderegisterBeanFactory(String name)
Deregisters the bean factory with the given name.
static ClassfetchBeanClass(BeanDeclaration data, Class defaultClass, BeanFactory factory)
Determines the class of the bean to be created.
static BeanFactoryfetchBeanFactory(BeanDeclaration data)
Obtains the bean factory to use for creating the specified bean.
static BeanFactorygetDefaultBeanFactory()
Returns the default bean factory.
static voidinitBean(Object bean, BeanDeclaration data)
Initializes the passed in bean.
static voidinitProperty(Object bean, String propName, Object value)
Sets a property on the given bean using Common Beanutils.
static ClassloadClass(String name, Class callingClass)
Returns a java.lang.Class object for the specified name.
static voidregisterBeanFactory(String name, BeanFactory factory)
Register a bean factory under a symbolic name.
static SetregisteredFactoryNames()
Returns a set with the names of all currently registered bean factories.
static voidsetDefaultBeanFactory(BeanFactory factory)
Sets the default bean factory.

Field Detail

beanFactories

private static Map beanFactories
Stores a map with the registered bean factories.

defaultBeanFactory

private static BeanFactory defaultBeanFactory
Stores the default bean factory, which will be used if no other factory is provided.

Constructor Detail

BeanHelper

private BeanHelper()
Private constructor, so no instances can be created.

Method Detail

createBean

public static Object createBean(BeanDeclaration data, Class defaultClass, Object param)
The main method for creating and initializing beans from a configuration. This method will return an initialized instance of the bean class specified in the passed in bean declaration. If this declaration does not contain the class of the bean, the passed in default class will be used. From the bean declaration the factory to be used for creating the bean is queried. The declaration may here return null, then a default factory is used. This factory is then invoked to perform the create operation.

Parameters: data the bean declaration defaultClass the default class to use param an additional parameter that will be passed to the bean factory; some factories may support parameters and behave different depending on the value passed in here

Returns: the new bean

Throws: ConfigurationRuntimeException if an error occurs

createBean

public static Object createBean(BeanDeclaration data, Class defaultClass)
Returns a bean instance for the specified declaration. This method is a short cut for createBean(data, null, null);.

Parameters: data the bean declaration defaultClass the class to be used when in the declation no class is specified

Returns: the new bean

Throws: ConfigurationRuntimeException if an error occurs

createBean

public static Object createBean(BeanDeclaration data)
Returns a bean instance for the specified declaration. This method is a short cut for createBean(data, null);.

Parameters: data the bean declaration

Returns: the new bean

Throws: ConfigurationRuntimeException if an error occurs

deregisterBeanFactory

public static BeanFactory deregisterBeanFactory(String name)
Deregisters the bean factory with the given name. After that this factory cannot be used any longer.

Parameters: name the name of the factory to be deregistered

Returns: the factory that was registered under this name; null if there was no such factory

fetchBeanClass

private static Class fetchBeanClass(BeanDeclaration data, Class defaultClass, BeanFactory factory)
Determines the class of the bean to be created. If the bean declaration contains a class name, this class is used. Otherwise it is checked whether a default class is provided. If this is not the case, the factory's default class is used. If this class is undefined, too, an exception is thrown.

Parameters: data the bean declaration defaultClass the default class factory the bean factory to use

Returns: the class of the bean to be created

Throws: ConfigurationRuntimeException if the class cannot be determined

fetchBeanFactory

private static BeanFactory fetchBeanFactory(BeanDeclaration data)
Obtains the bean factory to use for creating the specified bean. This method will check whether a factory is specified in the bean declaration. If this is not the case, the default bean factory will be used.

Parameters: data the bean declaration

Returns: the bean factory to use

Throws: ConfigurationRuntimeException if the factory cannot be determined

getDefaultBeanFactory

public static BeanFactory getDefaultBeanFactory()
Returns the default bean factory.

Returns: the default bean factory

initBean

public static void initBean(Object bean, BeanDeclaration data)
Initializes the passed in bean. This method will obtain all the bean's properties that are defined in the passed in bean declaration. These properties will be set on the bean. If necessary, further beans will be created recursively.

Parameters: bean the bean to be initialized data the bean declaration

Throws: ConfigurationRuntimeException if a property cannot be set

initProperty

private static void initProperty(Object bean, String propName, Object value)
Sets a property on the given bean using Common Beanutils.

Parameters: bean the bean propName the name of the property value the property's value

Throws: ConfigurationRuntimeException if the property is not writeable or an error occurred

loadClass

static Class loadClass(String name, Class callingClass)
Returns a java.lang.Class object for the specified name. This method and the helper method it invokes are very similar to code extracted from the ClassLoaderUtils class of Commons Jelly. It should be replaced if Commons Lang provides a generic version.

Parameters: name the name of the class to be loaded callingClass the calling class

Returns: the class object for the specified name

Throws: ClassNotFoundException if the class cannot be loaded

registerBeanFactory

public static void registerBeanFactory(String name, BeanFactory factory)
Register a bean factory under a symbolic name. This factory object can then be specified in bean declarations with the effect that this factory will be used to obtain an instance for the corresponding bean declaration.

Parameters: name the name of the factory factory the factory to be registered

registeredFactoryNames

public static Set registeredFactoryNames()
Returns a set with the names of all currently registered bean factories.

Returns: a set with the names of the registered bean factories

setDefaultBeanFactory

public static void setDefaultBeanFactory(BeanFactory factory)
Sets the default bean factory. This factory will be used for all create operations, for which no special factory is provided in the bean declaration.

Parameters: factory the default bean factory (must not be null)