An implementation of the BeanDeclaration
interface that is suitable for XML configuration files.
This class defines the standard layout of a bean declaration in an XML configuration file. Such a declaration must look like the following example fragement:
... <personBean config-class="my.model.PersonBean" lastName="Doe" firstName="John"> <address config-class="my.model.AddressBean" street="21st street 11" zip="1234" city="TestCity"/> </personBean>
The bean declaration can be contained in an arbitrary element. Here it is the <personBean>
element. In the attributes of this element there can occur some reserved attributes, which have the following meaning:
config-class
- Here the full qualified name of the bean's class can be specified. An instance of this class will be created. If this attribute is not specified, the bean class must be provided in another way, e.g. as the
defaultClass
passed to the BeanHelper
class. config-factory
- This attribute can contain the name of the
{@link BeanFactory}
that should be used for creating the bean. If it is defined, a factory with this name must have been registered at the BeanHelper
class. If this attribute is missing, the default bean factory will be used. config-factoryParam
- With this attribute a parameter can be specified that will be passed to the bean factory. This may be useful for custom bean factories.
All further attributes starting with the config-
prefix are considered as meta data and will be ignored. All other attributes are treated as properties of the bean to be created, i.e. corresponding setter methods of the bean will be invoked with the values specified here.
If the bean to be created has also some complex properties (which are itself beans), their values cannot be initialized from attributes. For this purpose nested elements can be used. The example listing shows how an address bean can be initialized. This is done in a nested element whose name must match the name of a property of the enclosing bean declaration. The format of this nested element is exactly the same as for the bean declaration itself, i.e. it can have attributes defining meta data or bean properties and even further nested elements for complex bean properties.
A XMLBeanDeclaration
object is usually created from a HierarchicalConfiguration
. From this it will derive a SubnodeConfiguration
, which is used to access the needed properties. This subnode configuration can be obtained using the {@link #getConfiguration()}
method. All of its properties can be accessed in the usual way. To ensure that the property keys used by this class are understood by the configuration, the default expression engine will be set.
@since 1.3
@author Oliver Heger
@version $Id: XMLBeanDeclaration.java 670739 2008-06-23 20:36:37Z oheger $