|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.expression.spel.support.ReflectivePropertyAccessor
public class ReflectivePropertyAccessor
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).
Nested Class Summary | |
---|---|
private static class |
ReflectivePropertyAccessor.CacheKey
|
private static class |
ReflectivePropertyAccessor.InvokerPair
Captures the member (method/field) to call reflectively to access a property value and the type descriptor for the value returned by the reflective call. |
(package private) static class |
ReflectivePropertyAccessor.OptimalPropertyAccessor
An optimized form of a PropertyAccessor that will use reflection but only knows how to access a particular property on a particular class. |
Field Summary | |
---|---|
protected java.util.Map<ReflectivePropertyAccessor.CacheKey,ReflectivePropertyAccessor.InvokerPair> |
readerCache
|
protected java.util.Map<ReflectivePropertyAccessor.CacheKey,TypeDescriptor> |
typeDescriptorCache
|
protected java.util.Map<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. |
private TypeDescriptor |
getTypeDescriptor(EvaluationContext context,
java.lang.Object target,
java.lang.String name)
|
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 |
---|
protected final java.util.Map<ReflectivePropertyAccessor.CacheKey,ReflectivePropertyAccessor.InvokerPair> readerCache
protected final java.util.Map<ReflectivePropertyAccessor.CacheKey,java.lang.reflect.Member> writerCache
protected final java.util.Map<ReflectivePropertyAccessor.CacheKey,TypeDescriptor> typeDescriptorCache
Constructor Detail |
---|
public ReflectivePropertyAccessor()
Method Detail |
---|
public java.lang.Class<?>[] getSpecificTargetClasses()
PropertyAccessor
getSpecificTargetClasses
in interface PropertyAccessor
public boolean canRead(EvaluationContext context, java.lang.Object target, java.lang.String name) throws AccessException
PropertyAccessor
canRead
in interface PropertyAccessor
context
- the evaluation context in which the access is being attemptedtarget
- the target object upon which the property is being accessedname
- the name of the property being accessed
AccessException
- if there is any problem determining whether the property can be readpublic TypedValue read(EvaluationContext context, java.lang.Object target, java.lang.String name) throws AccessException
PropertyAccessor
read
in interface PropertyAccessor
context
- the evaluation context in which the access is being attemptedtarget
- the target object upon which the property is being accessedname
- the name of the property being accessed
AccessException
- if there is any problem accessing the property valuepublic boolean canWrite(EvaluationContext context, java.lang.Object target, java.lang.String name) throws AccessException
PropertyAccessor
canWrite
in interface PropertyAccessor
context
- the evaluation context in which the access is being attemptedtarget
- the target object upon which the property is being accessedname
- the name of the property being accessed
AccessException
- if there is any problem determining whether the property can be written topublic void write(EvaluationContext context, java.lang.Object target, java.lang.String name, java.lang.Object newValue) throws AccessException
PropertyAccessor
write
in interface PropertyAccessor
context
- the evaluation context in which the access is being attemptedtarget
- the target object upon which the property is being accessedname
- the name of the property being accessednewValue
- the new value for the property
AccessException
- if there is any problem writing to the property valueprivate TypeDescriptor getTypeDescriptor(EvaluationContext context, java.lang.Object target, java.lang.String name)
protected java.lang.reflect.Method findGetterForProperty(java.lang.String propertyName, java.lang.Class<?> clazz, boolean mustBeStatic)
protected java.lang.reflect.Method findSetterForProperty(java.lang.String propertyName, java.lang.Class<?> clazz, boolean mustBeStatic)
protected java.lang.reflect.Field findField(java.lang.String name, java.lang.Class<?> clazz, boolean mustBeStatic)
public PropertyAccessor createOptimalAccessor(EvaluationContext eContext, java.lang.Object target, java.lang.String name)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |