java.lang.Object | |
↳ | org.apache.commons.beanutils.WrapDynaClass |
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);
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
beanClass | This field is deprecated. No longer initialized, use getBeanClass() method instead | ||||||||||
descriptors | The set of PropertyDescriptors for this bean class. | ||||||||||
descriptorsMap | The set of PropertyDescriptors for this bean class, keyed by the property name. | ||||||||||
dynaClasses | This field is deprecated. The dynaClasses Map will be removed in a subsequent release | ||||||||||
properties | The set of dynamic properties that are part of this DynaClass. | ||||||||||
propertiesMap | The set of dynamic properties that are part of this DynaClass, keyed by the property name. |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Clear our cache of WrapDynaClass instances.
| |||||||||||
Create (if necessary) and return a new
WrapDynaClass
instance for the specified bean class. | |||||||||||
Return an array of | |||||||||||
Return a property descriptor for the specified property, if it exists;
otherwise, return
null . | |||||||||||
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. | |||||||||||
Return the PropertyDescriptor for the specified property name, if any;
otherwise return
null . | |||||||||||
Instantiates a new standard JavaBean instance associated with this DynaClass and return it wrapped in a new WrapDynaBean instance. |
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Return the class of the underlying wrapped bean.
| |||||||||||
Introspect our bean class to identify the supported properties.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
| |||||||||||
From interface
org.apache.commons.beanutils.DynaClass
|
This field is deprecated.
No longer initialized, use getBeanClass() method instead
The JavaBean Class
which is represented by this
WrapDynaClass
.
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.
This field is deprecated.
The dynaClasses Map will be removed in a subsequent release
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.
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 our cache of WrapDynaClass instances.
Create (if necessary) and return a new WrapDynaClass
instance for the specified bean class.
beanClass | Bean class for which a WrapDynaClass is requested |
---|
DynaClass
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?
Return a property descriptor for the specified property, if it exists;
otherwise, return null
.
name | Name of the dynamic property for which a descriptor is requested |
---|
IllegalArgumentException | if no property name is specified |
---|
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.
Return the PropertyDescriptor for the specified property name, if any;
otherwise return null
.
name | Name of the property to be retrieved |
---|
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 newWrapDynaBean
instances by calling its constructor.
For example:
Object javaBean = ...;
DynaBean wrapper = new WrapDynaBean(javaBean);
(This method is needed for some kinds of DynaBean
framework.)
DynaBean
instanceIllegalAccessException | if the Class or the appropriate constructor is not accessible |
---|---|
InstantiationException | if this Class represents an abstract class, an array class, a primitive type, or void; or if instantiation fails for some other reason |
Return the class of the underlying wrapped bean.
Introspect our bean class to identify the supported properties.