Overview | Package | Class | Tree | Deprecated | Index | Help
| Spring Framework
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.springframework.expression.spel.support
Class ReflectivePropertyAccessor

    java.lang.Object
      org.springframework.expression.spel.support.ReflectivePropertyAccessor

All Implemented Interfaces:
  PropertyAccessor

    public class ReflectivePropertyAccessor

extends java.lang.Object
implements PropertyAccessor

Simple PropertyAccessor that uses reflection to access properties for reading and writing. A property can be accessed if it is accessible as a field on the object or through a getter (if being read) or a setter (if being written).

Since:
  3.0
Author:
  Andy Clement, Juergen Hoeller

Field Summary
`protected java.util.Map<org.springframework.expression.spel.support.ReflectivePropertyAccessor.CacheKey,org.springframework.expression.spel.support.ReflectivePropertyAccessor.InvokerPair>` | `readerCache`
`protected java.util.Map<org.springframework.expression.spel.support.ReflectivePropertyAccessor.CacheKey,TypeDescriptor>` | `typeDescriptorCache`
`protected java.util.Map<org.springframework.expression.spel.support.ReflectivePropertyAccessor.CacheKey,java.lang.reflect.Member>` | `writerCache`

Constructor Summary
`ReflectivePropertyAccessor()`

Method Summary
`boolean` | `canRead(EvaluationContext context, java.lang.Object target, java.lang.String name)` Called to determine if a resolver instance is able to access a specified property on a specified target object.
`boolean` | `canWrite(EvaluationContext context, java.lang.Object target, java.lang.String name)` Called to determine if a resolver instance is able to write to a specified property on a specified target object.
`PropertyAccessor` | `createOptimalAccessor(EvaluationContext eContext, java.lang.Object target, java.lang.String name)` Attempt to create an optimized property accessor tailored for a property of a particular name on a particular class.
`protected java.lang.reflect.Field` | `findField(java.lang.String name, java.lang.Class<?> clazz, boolean mustBeStatic)` Find a field of a certain name on a specified class
`protected java.lang.reflect.Method` | `findGetterForProperty(java.lang.String propertyName, java.lang.Class<?> clazz, boolean mustBeStatic)` Find a getter method for the specified property.
`protected java.lang.reflect.Method` | `findSetterForProperty(java.lang.String propertyName, java.lang.Class<?> clazz, boolean mustBeStatic)` Find a setter method for the specified property.
`java.lang.Class<?>[]` | `getSpecificTargetClasses()` Return an array of classes for which this resolver should be called.
`TypedValue` | `read(EvaluationContext context, java.lang.Object target, java.lang.String name)` Called to read a property from a specified target object
`void` | `write(EvaluationContext context, java.lang.Object target, java.lang.String name, java.lang.Object newValue)` Called to write to a property on a specified target object.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### readerCache

    protected final java.util.Map<org.springframework.expression.spel.support.ReflectivePropertyAccessor.CacheKey,org.springframework.expression.spel.support.ReflectivePropertyAccessor.InvokerPair> readerCache

### writerCache

    protected final java.util.Map<org.springframework.expression.spel.support.ReflectivePropertyAccessor.CacheKey,java.lang.reflect.Member> writerCache

### typeDescriptorCache

    protected final java.util.Map<org.springframework.expression.spel.support.ReflectivePropertyAccessor.CacheKey,TypeDescriptor> typeDescriptorCache

Constructor Detail

### ReflectivePropertyAccessor

    public ReflectivePropertyAccessor()

Method Detail

### getSpecificTargetClasses

    public java.lang.Class<?>[] getSpecificTargetClasses()

  Description copied from interface: `PropertyAccessor`
  Return an array of classes for which this resolver should be called. Returning null indicates this is a general resolver that can be called in an attempt to resolve a property on any type.

  Specified by:
    `getSpecificTargetClasses` in interface `PropertyAccessor`
  Returns:
    null which means this is a general purpose accessor

### canRead

    public boolean canRead(EvaluationContext context,
                           java.lang.Object target,
                           java.lang.String name)
                    throws AccessException

  Description copied from interface: `PropertyAccessor`
  Called to determine if a resolver instance is able to access a specified property on a specified target object.

  Specified by:
    `canRead` in interface `PropertyAccessor`
  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 resolver is able to read the property
  Throws:
    `AccessException` - if there is any problem determining whether the property can be read

### read

    public TypedValue read(EvaluationContext context,
                           java.lang.Object target,
                           java.lang.String name)
                    throws AccessException

  Description copied from interface: `PropertyAccessor`
  Called to read a property from a specified target object

  Specified by:
    `read` in interface `PropertyAccessor`
  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 accessing the property value

### canWrite

    public boolean canWrite(EvaluationContext context,
                            java.lang.Object target,
                            java.lang.String name)
                     throws AccessException

  Description copied from interface: `PropertyAccessor`
  Called to determine if a resolver instance is able to write to a specified property on a specified target object.

  Specified by:
    `canWrite` in interface `PropertyAccessor`
  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 resolver is able to write to the property
  Throws:
    `AccessException` - if there is any problem determining whether the property can be written to

### write

    public void write(EvaluationContext context,
                      java.lang.Object target,
                      java.lang.String name,
                      java.lang.Object newValue)
               throws AccessException

  Description copied from interface: `PropertyAccessor`
  Called to write to a property on a specified target object. Should only succeed if canWrite() also returns true.

  Specified by:
    `write` in interface `PropertyAccessor`
  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

### findGetterForProperty

    protected java.lang.reflect.Method findGetterForProperty(java.lang.String propertyName,
                                                             java.lang.Class<?> clazz,
                                                             boolean mustBeStatic)

  Find a getter method for the specified property.

### findSetterForProperty

    protected java.lang.reflect.Method findSetterForProperty(java.lang.String propertyName,
                                                             java.lang.Class<?> clazz,
                                                             boolean mustBeStatic)

  Find a setter method for the specified property.

### findField

    protected java.lang.reflect.Field findField(java.lang.String name,
                                                java.lang.Class<?> clazz,
                                                boolean mustBeStatic)

  Find a field of a certain name on a specified class

### createOptimalAccessor

    public PropertyAccessor createOptimalAccessor(EvaluationContext eContext,
                                                  java.lang.Object target,
                                                  java.lang.String name)

  Attempt to create an optimized property accessor tailored for a property of a particular name on a particular class. The general ReflectivePropertyAccessor will always work but is not optimal due to the need to lookup which reflective member (method/field) to use each time read() is called. This method will just return the ReflectivePropertyAccessor instance if it is unable to build something more optimal.

Overview | Package | Class | Tree | Deprecated | Index | Help
| Spring Framework
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD