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
    Modifier and Type | Method and Description
    --- | ---
    `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`