Package org.springframework.expression

# Interface PropertyAccessor

All Superinterfaces:
  `TargetedAccessor`

All Known Subinterfaces:
  `CompilablePropertyAccessor`

All Known Implementing Classes:
  `DataBindingPropertyAccessor`, `ReflectivePropertyAccessor`

public interface PropertyAccessor extends TargetedAccessor
A property accessor is able to read from (and possibly write to) an object's properties.

This interface places no restrictions on what constitutes a property. Implementors are therefore free to access properties directly via fields, through getters, or in any other way they deem appropriate.

A property accessor can specify an array of target classes for which it should be called. See `TargetedAccessor` for details.

Since:
  3.0
Author:
  Andy Clement
See Also:
  - `TargetedAccessor`
  - `IndexAccessor`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`canRead(EvaluationContext context, Object target, String name)`
Called to determine if this property accessor is able to read a specified property on a specified target object.
`boolean`
`canWrite(EvaluationContext context, Object target, String name)`
Called to determine if this property accessor is able to write to a specified property on a specified target object.
`TypedValue`
`read(EvaluationContext context, Object target, String name)`
Called to read a property from a specified target object.
`void`
`write(EvaluationContext context, Object target, String name, Object newValue)`
Called to write to a property on a specified target object.

### Methods inherited from interface org.springframework.expression.TargetedAccessor

`getSpecificTargetClasses`

## Method Details

### canRead

boolean canRead(EvaluationContext context, @Nullable Object target, String name) throws AccessException
Called to determine if this property accessor is able to read a specified property on a specified target object.

Parameters:
  `context` - the evaluation context in which the access is being attempted
  `target` - the target object upon which the property is being accessed
  `name` - the name of the property being accessed
Returns:
  true if this property accessor is able to read the property
Throws:
  `AccessException` - if there is any problem determining whether the property can be read

### read

TypedValue read(EvaluationContext context, @Nullable Object target, String name) throws AccessException
Called to read a property from a specified target object.

Should only succeed if `canRead(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String)` also returns `true`.

Parameters:
  `context` - the evaluation context in which the access is being attempted
  `target` - the target object upon which the property is being accessed
  `name` - the name of the property being accessed
Returns:
  a TypedValue object wrapping the property value read and a type descriptor for it
Throws:
  `AccessException` - if there is any problem reading the property value

### canWrite

boolean canWrite(EvaluationContext context, @Nullable Object target, String name) throws AccessException
Called to determine if this property accessor is able to write to a specified property on a specified target object.

Parameters:
  `context` - the evaluation context in which the access is being attempted
  `target` - the target object upon which the property is being accessed
  `name` - the name of the property being accessed
Returns:
  true if this property accessor is able to write to the property
Throws:
  `AccessException` - if there is any problem determining whether the property can be written to

### write

void write(EvaluationContext context, @Nullable Object target, String name, @Nullable Object newValue) throws AccessException
Called to write to a property on a specified target object.

Should only succeed if `canWrite(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String)` also returns `true`.

Parameters:
  `context` - the evaluation context in which the access is being attempted
  `target` - the target object upon which the property is being accessed
  `name` - the name of the property being accessed
  `newValue` - the new value for the property
Throws:
  `AccessException` - if there is any problem writing to the property value