public abstract class AbstractPropertyAccessor extends TypeConverterSupport implements ConfigurablePropertyAccessor
PropertyAccessor
interface.
Provides base implementations of all convenience methods, with the
implementation of actual property access left to subclasses.getPropertyValue(java.lang.String)
,
setPropertyValue(org.springframework.beans.PropertyValue)
NESTED_PROPERTY_SEPARATOR, NESTED_PROPERTY_SEPARATOR_CHAR, PROPERTY_KEY_PREFIX, PROPERTY_KEY_PREFIX_CHAR, PROPERTY_KEY_SUFFIX, PROPERTY_KEY_SUFFIX_CHAR
Constructor and Description |
---|
AbstractPropertyAccessor() |
Modifier and Type | Method and Description |
---|---|
Class<?> |
getPropertyType(String propertyPath)
Determine the property type for the given property path.
|
abstract Object |
getPropertyValue(String propertyName)
Actually get the value of a property.
|
boolean |
isAutoGrowNestedPaths()
Return whether "auto-growing" of nested paths has been activated.
|
boolean |
isExtractOldValueForEditor()
Return whether to extract the old property value when applying a
property editor to a new value for a property.
|
void |
setAutoGrowNestedPaths(boolean autoGrowNestedPaths)
Set whether this instance should attempt to "auto-grow" a
nested path that contains a
null value. |
void |
setExtractOldValueForEditor(boolean extractOldValueForEditor)
Set whether to extract the old property value when applying a
property editor to a new value for a property.
|
void |
setPropertyValue(PropertyValue pv)
Set the specified value as current property value.
|
abstract void |
setPropertyValue(String propertyName,
Object value)
Actually set a property value.
|
void |
setPropertyValues(Map<?,?> map)
Perform a batch update from a Map.
|
void |
setPropertyValues(PropertyValues pvs)
The preferred way to perform a batch update.
|
void |
setPropertyValues(PropertyValues pvs,
boolean ignoreUnknown)
Perform a batch update with more control over behavior.
|
void |
setPropertyValues(PropertyValues pvs,
boolean ignoreUnknown,
boolean ignoreInvalid)
Perform a batch update with full control over behavior.
|
convertIfNecessary, convertIfNecessary, convertIfNecessary, convertIfNecessary
copyCustomEditorsTo, copyDefaultEditorsTo, findCustomEditor, getConversionService, getDefaultEditor, guessPropertyTypeFromEditors, hasCustomEditorForElement, overrideDefaultEditor, registerCustomEditor, registerCustomEditor, registerDefaultEditors, setConversionService, useConfigValueEditors
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getConversionService, setConversionService
getPropertyTypeDescriptor, isReadableProperty, isWritableProperty
findCustomEditor, registerCustomEditor, registerCustomEditor
convertIfNecessary, convertIfNecessary, convertIfNecessary, convertIfNecessary
public void setExtractOldValueForEditor(boolean extractOldValueForEditor)
ConfigurablePropertyAccessor
setExtractOldValueForEditor
in interface ConfigurablePropertyAccessor
public boolean isExtractOldValueForEditor()
ConfigurablePropertyAccessor
isExtractOldValueForEditor
in interface ConfigurablePropertyAccessor
public void setAutoGrowNestedPaths(boolean autoGrowNestedPaths)
ConfigurablePropertyAccessor
null
value.
If true
, a null
path location will be populated
with a default object value and traversed instead of resulting in a
NullValueInNestedPathException
.
Default is false
on a plain PropertyAccessor instance.
setAutoGrowNestedPaths
in interface ConfigurablePropertyAccessor
public boolean isAutoGrowNestedPaths()
ConfigurablePropertyAccessor
isAutoGrowNestedPaths
in interface ConfigurablePropertyAccessor
public void setPropertyValue(PropertyValue pv) throws BeansException
PropertyAccessor
setPropertyValue
in interface PropertyAccessor
pv
- an object containing the new property valueInvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyAccessException
- if the property was valid but the
accessor method failed or a type mismatch occurredBeansException
public void setPropertyValues(Map<?,?> map) throws BeansException
PropertyAccessor
Bulk updates from PropertyValues are more powerful: This method is
provided for convenience. Behavior will be identical to that of
the PropertyAccessor.setPropertyValues(PropertyValues)
method.
setPropertyValues
in interface PropertyAccessor
map
- a Map to take properties from. Contains property value objects,
keyed by property nameInvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyBatchUpdateException
- if one or more PropertyAccessExceptions
occurred for specific properties during the batch update. This exception bundles
all individual PropertyAccessExceptions. All other properties will have been
successfully updated.BeansException
public void setPropertyValues(PropertyValues pvs) throws BeansException
PropertyAccessor
Note that performing a batch update differs from performing a single update,
in that an implementation of this class will continue to update properties
if a recoverable error (such as a type mismatch, but not an
invalid field name or the like) is encountered, throwing a
PropertyBatchUpdateException
containing all the individual errors.
This exception can be examined later to see all binding errors.
Properties that were successfully updated remain changed.
Does not allow unknown fields or invalid fields.
setPropertyValues
in interface PropertyAccessor
pvs
- a PropertyValues to set on the target objectInvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyBatchUpdateException
- if one or more PropertyAccessExceptions
occurred for specific properties during the batch update. This exception bundles
all individual PropertyAccessExceptions. All other properties will have been
successfully updated.BeansException
PropertyAccessor.setPropertyValues(PropertyValues, boolean, boolean)
public void setPropertyValues(PropertyValues pvs, boolean ignoreUnknown) throws BeansException
PropertyAccessor
Note that performing a batch update differs from performing a single update,
in that an implementation of this class will continue to update properties
if a recoverable error (such as a type mismatch, but not an
invalid field name or the like) is encountered, throwing a
PropertyBatchUpdateException
containing all the individual errors.
This exception can be examined later to see all binding errors.
Properties that were successfully updated remain changed.
setPropertyValues
in interface PropertyAccessor
pvs
- a PropertyValues to set on the target objectignoreUnknown
- should we ignore unknown properties (not found in the bean)InvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyBatchUpdateException
- if one or more PropertyAccessExceptions
occurred for specific properties during the batch update. This exception bundles
all individual PropertyAccessExceptions. All other properties will have been
successfully updated.BeansException
PropertyAccessor.setPropertyValues(PropertyValues, boolean, boolean)
public void setPropertyValues(PropertyValues pvs, boolean ignoreUnknown, boolean ignoreInvalid) throws BeansException
PropertyAccessor
Note that performing a batch update differs from performing a single update,
in that an implementation of this class will continue to update properties
if a recoverable error (such as a type mismatch, but not an
invalid field name or the like) is encountered, throwing a
PropertyBatchUpdateException
containing all the individual errors.
This exception can be examined later to see all binding errors.
Properties that were successfully updated remain changed.
setPropertyValues
in interface PropertyAccessor
pvs
- a PropertyValues to set on the target objectignoreUnknown
- should we ignore unknown properties (not found in the bean)ignoreInvalid
- should we ignore invalid properties (found but not accessible)InvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyBatchUpdateException
- if one or more PropertyAccessExceptions
occurred for specific properties during the batch update. This exception bundles
all individual PropertyAccessExceptions. All other properties will have been
successfully updated.BeansException
@Nullable public Class<?> getPropertyType(String propertyPath)
PropertyEditorRegistrySupport
Called by PropertyEditorRegistrySupport.findCustomEditor(java.lang.Class<?>, java.lang.String)
if no required type has been specified,
to be able to find a type-specific editor even if just given a property path.
The default implementation always returns null
.
BeanWrapperImpl overrides this with the standard getPropertyType
method as defined by the BeanWrapper interface.
getPropertyType
in interface PropertyAccessor
getPropertyType
in class PropertyEditorRegistrySupport
propertyPath
- the property path to determine the type fornull
if not determinablePropertyAccessor.getPropertyType(String)
@Nullable public abstract Object getPropertyValue(String propertyName) throws BeansException
getPropertyValue
in interface PropertyAccessor
propertyName
- name of the property to get the value ofInvalidPropertyException
- if there is no such property or
if the property isn't readablePropertyAccessException
- if the property was valid but the
accessor method failedBeansException
public abstract void setPropertyValue(String propertyName, @Nullable Object value) throws BeansException
setPropertyValue
in interface PropertyAccessor
propertyName
- name of the property to set value ofvalue
- the new valueInvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyAccessException
- if the property was valid but the
accessor method failed or a type mismatch occurredBeansException