org.springframework.beans

## Class DirectFieldAccessor

- java.lang.Object
- - org.springframework.beans.PropertyEditorRegistrySupport
  - - org.springframework.beans.TypeConverterSupport
    - - org.springframework.beans.AbstractPropertyAccessor
      - - org.springframework.beans.DirectFieldAccessor

All Implemented Interfaces:
  ConfigurablePropertyAccessor, PropertyAccessor, PropertyEditorRegistry, TypeConverter

    public class DirectFieldAccessor
    extends AbstractPropertyAccessor

`PropertyAccessor` implementation that directly accesses instance fields. Allows for direct binding to fields instead of going through JavaBean setters.

This implementation just supports fields in the actual target object. It is not able to traverse nested fields.

A DirectFieldAccessor's default for the "extractOldValueForEditor" setting is "true", since a field can always be read without side effects.

Since:
  2.0
Author:
  Juergen Hoeller
See Also:
  `AbstractPropertyAccessor.setExtractOldValueForEditor(boolean)`, `BeanWrapper`, `DirectFieldBindingResult`, `DataBinder.initDirectFieldAccess()`

### Field Summary

### Fields inherited from interface org.springframework.beans.PropertyAccessor

`NESTED_PROPERTY_SEPARATOR, NESTED_PROPERTY_SEPARATOR_CHAR, PROPERTY_KEY_PREFIX, PROPERTY_KEY_PREFIX_CHAR, PROPERTY_KEY_SUFFIX, PROPERTY_KEY_SUFFIX_CHAR`

### Constructor Summary

Constructors
Constructor and Description
`DirectFieldAccessor(Object target)` Create a new DirectFieldAccessor for the given target object.

### Method Summary

Methods
`Class<?>` `getPropertyType(String propertyName)` Determine the property type for the given property path.
`TypeDescriptor` `getPropertyTypeDescriptor(String propertyName)` Return a type descriptor for the specified property: preferably from the read method, falling back to the write method.
`Object` `getPropertyValue(String propertyName)` Actually get the value of a property.
`boolean` `isReadableProperty(String propertyName)` Determine whether the specified property is readable.
`boolean` `isWritableProperty(String propertyName)` Determine whether the specified property is writable.
`void` `setPropertyValue(String propertyName, Object newValue)` Actually set a property value.

### Methods inherited from class org.springframework.beans.AbstractPropertyAccessor

`isExtractOldValueForEditor, setExtractOldValueForEditor, setPropertyValue, setPropertyValues, setPropertyValues, setPropertyValues, setPropertyValues`

### Methods inherited from class org.springframework.beans.TypeConverterSupport

`convertIfNecessary, convertIfNecessary, convertIfNecessary`

### Methods inherited from class org.springframework.beans.PropertyEditorRegistrySupport

`copyCustomEditorsTo, copyDefaultEditorsTo, findCustomEditor, getConversionService, getDefaultEditor, guessPropertyTypeFromEditors, hasCustomEditorForElement, isSharedEditor, overrideDefaultEditor, registerCustomEditor, registerCustomEditor, registerDefaultEditors, registerSharedEditor, setConversionService, useConfigValueEditors`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.beans.ConfigurablePropertyAccessor

`getConversionService, setConversionService`

### Methods inherited from interface org.springframework.beans.PropertyEditorRegistry

`findCustomEditor, registerCustomEditor, registerCustomEditor`

### Methods inherited from interface org.springframework.beans.TypeConverter

`convertIfNecessary, convertIfNecessary, convertIfNecessary`

### Constructor Detail

#### DirectFieldAccessor

    public DirectFieldAccessor(Object target)

Create a new DirectFieldAccessor for the given target object.

Parameters:
  `target` - the target object to access

### Method Detail

#### isReadableProperty

    public boolean isReadableProperty(String propertyName)
                               throws BeansException

Description copied from interface: `PropertyAccessor`
Determine whether the specified property is readable.

Returns `false` if the property doesn't exist.

Parameters:
  `propertyName` - the property to check (may be a nested path and/or an indexed/mapped property)
Returns:
  whether the property is readable
Throws:
  `BeansException`

#### isWritableProperty

    public boolean isWritableProperty(String propertyName)
                               throws BeansException

Description copied from interface: `PropertyAccessor`
Determine whether the specified property is writable.

Returns `false` if the property doesn't exist.

Parameters:
  `propertyName` - the property to check (may be a nested path and/or an indexed/mapped property)
Returns:
  whether the property is writable
Throws:
  `BeansException`

#### getPropertyType

    public Class<?> getPropertyType(String propertyName)
                             throws BeansException

Description copied from class: `PropertyEditorRegistrySupport`
Determine the property type for the given property path.

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.

Specified by:
  `getPropertyType` in interface `PropertyAccessor`
Overrides:
  `getPropertyType` in class `AbstractPropertyAccessor`
Parameters:
  `propertyName` - the property path to determine the type for
Returns:
  the type of the property, or `null` if not determinable
Throws:
  `InvalidPropertyException` - if there is no such property or if the property isn't readable
  `PropertyAccessException` - if the property was valid but the accessor method failed
  `BeansException`
See Also:
  `PropertyAccessor.getPropertyType(String)`

#### getPropertyTypeDescriptor

    public TypeDescriptor getPropertyTypeDescriptor(String propertyName)
                                             throws BeansException

Description copied from interface: `PropertyAccessor`
Return a type descriptor for the specified property: preferably from the read method, falling back to the write method.

Parameters:
  `propertyName` - the property to check (may be a nested path and/or an indexed/mapped property)
Returns:
  the property type for the particular property, or `null` if not determinable
Throws:
  `InvalidPropertyException` - if there is no such property or if the property isn't readable
  `BeansException`

#### getPropertyValue

    public Object getPropertyValue(String propertyName)
                            throws BeansException

Description copied from class: `AbstractPropertyAccessor`
Actually get the value of a property.

Specified by:
  `getPropertyValue` in interface `PropertyAccessor`
Specified by:
  `getPropertyValue` in class `AbstractPropertyAccessor`
Parameters:
  `propertyName` - name of the property to get the value of
Returns:
  the value of the property
Throws:
  `InvalidPropertyException` - if there is no such property or if the property isn't readable
  `PropertyAccessException` - if the property was valid but the accessor method failed
  `BeansException`

#### setPropertyValue

    public void setPropertyValue(String propertyName,
                        Object newValue)
                          throws BeansException

Description copied from class: `AbstractPropertyAccessor`
Actually set a property value.

Specified by:
  `setPropertyValue` in interface `PropertyAccessor`
Specified by:
  `setPropertyValue` in class `AbstractPropertyAccessor`
Parameters:
  `propertyName` - name of the property to set value of
  `newValue` - the new value
Throws:
  `InvalidPropertyException` - if there is no such property or if the property isn't writable
  `PropertyAccessException` - if the property was valid but the accessor method failed or a type mismatch occured
  `BeansException`