Use a DynaBean. You can create
a DynaBean with an arbitrary set of
properties at runtime, and the resulting DynaBean object will function properly with
all Commons BeanUtils utilities, such as PropertyUtils. The following example
demonstrates the use of a BasicDynaBean to model a politician:
import java.util.*;
import org.apache.commons.beanutils.*;
DynaProperty[] beanProperties = new DynaProperty[]{
new DynaProperty("name", String.class),
new DynaProperty("party", Party.class),
new DynaProperty("votes", Long.class)
};
BasicDynaClass politicianClass =
new BasicDynaClass("politician", BasicDynaBean.class, props);
DynaBean politician = politicianClass.newInstance( );
// Set the properties via DynaBean
politician.set( "name", "Tony Blair" );
politician.set( "party", Party.LABOUR );
politician.set( "votes", new Long( 50000000 ) );
// Set the properties with PropertyUtils
PropertyUtils.setProperty( politician, "name", "John Major" );
PropertyUtils.setProperty( politician, "party", Party.TORY );
PropertyUtils.setProperty( politician, "votes", new Long( 50000000 ) );In this code, the properties of the politician bean are set using two different
methods. The first method is to manipulate properties via the DynaBean interface, and the second method involves using PropertyUtils.setProperty( ). Both regions of
code accomplish the same goal, and PropertyUtils was included to emphasize the
fact that most utilities in BeanUtils will understand how to work with
DynaBean implementations.
DynaBean objects come in handy
when your system uses beans to represent a data model. Since a bean is
just a collection of properties, you can avoid having to maintain a bean
class by automatically generating a bean from a description of the
objects and properties; for example, a complex data model could be
described in an XML document, and a utility would parse such a document
and create a number of DynaClass
objects at runtime.
A DynaBean contains the methods
listed in Table 3-2. There are
methods to get and set indexed and mapped properties, and two
operations—remove() and contains( )—allow you to manipulate the
contents of a Map property.
Table 3-2. Methods available on a DynaBean
|
Method |
Description |
|---|---|
|
|
Retrieves a simple bean property |
|
|
Retrieves an indexed been property |
|
|
Retrieves a mapped bean property |
|
|
Sets a simple bean property |
|
|
Sets an indexed bean property |
|
|
Sets a mapped bean property |
|
|
Removes a key from a mapped bean property |
|
|
Tests a map property for the presence of a key |
Chapter 6 combines the power of Commons
Digester and Commons BeanUtils to create a utility that reads in bean
definitions from an XML document. A data model is described using an XML
document, and it is realized into a set of DynaClass objects.
Chapter 12 discusses
the power of Commons BeanUtils as it relates to working with a database.
A ResultSetDynaClass enables you to
wrap a JDBC ResultSet.
