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
.
3.144.21.158