| java.lang.Object org.apache.commons.beanutils.WrapDynaClass
WrapDynaClass | public class WrapDynaClass implements DynaClass(Code) | | Implementation of DynaClass for DynaBeans that wrap
standard JavaBean instances.
It is suggested that this class should not usually need to be used directly
to create new WrapDynaBean instances.
It's usually better to call the WrapDynaBean constructor directly.
For example:
Object javaBean = ...;
DynaBean wrapper = new WrapDynaBean(javaBean);
author: Craig McClanahan version: $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $ |
Field Summary | |
protected Class | beanClass The JavaBean Class which is represented by this
WrapDynaClass . | protected PropertyDescriptor[] | descriptors The set of PropertyDescriptors for this bean class. | protected HashMap | descriptorsMap The set of PropertyDescriptors for this bean class, keyed by the
property name. | protected static HashMap | dynaClasses The set of WrapDynaClass instances that have ever been
created, keyed by the underlying bean Class. | protected DynaProperty[] | properties The set of dynamic properties that are part of this DynaClass. | protected HashMap | propertiesMap The set of dynamic properties that are part of this DynaClass,
keyed by the property name. |
Method Summary | |
public static void | clear() Clear our cache of WrapDynaClass instances. | public static WrapDynaClass | createDynaClass(Class beanClass) Create (if necessary) and return a new WrapDynaClass
instance for the specified bean class. | public DynaProperty[] | getDynaProperties() Return an array of ProperyDescriptors for the properties
currently defined in this DynaClass. | public DynaProperty | getDynaProperty(String name) Return a property descriptor for the specified property, if it exists;
otherwise, return null . | public String | getName() Return the name of this DynaClass (analogous to the
getName() method of java.lang.Class DynaClass implementation class to support
different dynamic classes, with different sets of properties. | public PropertyDescriptor | getPropertyDescriptor(String name) Return the PropertyDescriptor for the specified property name, if any;
otherwise return null . | protected void | introspect() Introspect our bean class to identify the supported properties. | public DynaBean | newInstance() Instantiates a new standard JavaBean instance associated with
this DynaClass and return it wrapped in a new WrapDynaBean
instance. |
beanClass | protected Class beanClass(Code) | | The JavaBean Class which is represented by this
WrapDynaClass .
|
descriptorsMap | protected HashMap descriptorsMap(Code) | | The set of PropertyDescriptors for this bean class, keyed by the
property name. Individual descriptor instances will be the same
instances as those in the descriptors list.
|
dynaClasses | protected static HashMap dynaClasses(Code) | | The set of WrapDynaClass instances that have ever been
created, keyed by the underlying bean Class. The keys to this map
are Class objects, and the values are corresponding WrapDynaClass
objects.
This static variable is safe even when this code is deployed via a
shared classloader because it is keyed via a Class object. The same
class loaded via two different classloaders will result in different
entries in this map.
Note, however, that this HashMap can result in a memory leak. When
this class is in a shared classloader it will retain references to
classes loaded via a webapp classloader even after the webapp has been
undeployed. That will prevent the entire classloader and all the classes
it refers to and all their static members from being freed.
!!!!!!!!!!!! PLEASE NOTE !!!!!!!!!!!! *************
THE FOLLOWING IS A NASTY HACK TO SO THAT BEANUTILS REMAINS BINARY
COMPATIBLE WITH PREVIOUS RELEASES.
There are two issues here:
1) Memory Issues: The static HashMap caused memory problems (See BEANUTILS-59)
to resolve this it has been moved into a ContextClassLoaderLocal instance
(named CLASSLOADER_CACHE above) which holds one copy per
ClassLoader in a WeakHashMap.
2) Binary Compatibility: As the "dynaClasses" static HashMap is "protected"
removing it breaks BeanUtils binary compatibility with previous versions.
To resolve this all the methods have been overriden to delegate to the
Map for the ClassLoader in the ContextClassLoaderLocal.
|
properties | protected DynaProperty[] properties(Code) | | The set of dynamic properties that are part of this DynaClass.
|
propertiesMap | protected HashMap propertiesMap(Code) | | The set of dynamic properties that are part of this DynaClass,
keyed by the property name. Individual descriptor instances will
be the same instances as those in the properties list.
|
clear | public static void clear()(Code) | | Clear our cache of WrapDynaClass instances.
|
createDynaClass | public static WrapDynaClass createDynaClass(Class beanClass)(Code) | | Create (if necessary) and return a new WrapDynaClass
instance for the specified bean class.
Parameters: beanClass - Bean class for which a WrapDynaClass is requested A new Wrap DynaClass |
getDynaProperties | public DynaProperty[] getDynaProperties()(Code) | | Return an array of ProperyDescriptors for the properties
currently defined in this DynaClass. If no properties are defined, a
zero-length array will be returned.
FIXME - Should we really be implementing
getBeanInfo() instead, which returns property descriptors
and a bunch of other stuff?
the set of properties for this DynaClass |
getDynaProperty | public DynaProperty getDynaProperty(String name)(Code) | | Return a property descriptor for the specified property, if it exists;
otherwise, return null .
Parameters: name - Name of the dynamic property for which a descriptoris requested The descriptor for the specified property exception: IllegalArgumentException - if no property name is specified |
getName | public String getName()(Code) | | Return the name of this DynaClass (analogous to the
getName() method of java.lang.Class DynaClass implementation class to support
different dynamic classes, with different sets of properties.
the name of the DynaClass |
getPropertyDescriptor | public PropertyDescriptor getPropertyDescriptor(String name)(Code) | | Return the PropertyDescriptor for the specified property name, if any;
otherwise return null .
Parameters: name - Name of the property to be retrieved The descriptor for the specified property |
introspect | protected void introspect()(Code) | | Introspect our bean class to identify the supported properties.
|
newInstance | public DynaBean newInstance() throws IllegalAccessException, InstantiationException(Code) | | Instantiates a new standard JavaBean instance associated with
this DynaClass and return it wrapped in a new WrapDynaBean
instance. NOTE the JavaBean should have a
no argument constructor.
NOTE - Most common use cases should not need to use
this method. It is usually better to create new
WrapDynaBean instances by calling its constructor.
For example:
Object javaBean = ...;
DynaBean wrapper = new WrapDynaBean(javaBean);
(This method is needed for some kinds of DynaBean framework.)
A new DynaBean instance exception: IllegalAccessException - if the Class or the appropriateconstructor is not accessible exception: InstantiationException - if this Class represents an abstractclass, an array class, a primitive type, or void; or if instantiationfails for some other reason |
|
|