This adds a ConfigurationBuilder class to simplify creating a
SpringConfigurationLoader configured with the necessary augmentations.
The ConfigurationBuilder supports ApplicationContext objects in
addition to BeanFactory objects.
This change also adds the BeanFactory as an instance variable of
SpringConfigurationLoader. The BeanFactory is required for retrieving
information about each bean. Previously, it was only available for
top-level beans. By storing the BeanFactory as an instance variable,
it is now available for obtaining the BeanDefinition of nested beans.
Previously, only top-level beans were merged with parent definitions.
The Spring getMergedBeanDefinition method cannot be used for bean
definitions that are not at the top-level, because the BeanFactory does
not recognise the name of the nested bean.
This change includes a simple algorithm for merging nested beans with
their parents, because the methods required to merge BeanDefinitions
in the BeanFactory are protected methods.
The getValue() method on the QDox Type class returns the element type
as a string for array types. The code was using getValue() without
checking whether the type was an array type. The toString() method
returns the type name with array brackets for each array dimension,
which provides the type in the required format.