org.springframework.expression.spel.ast
Class PropertyOrFieldReference
java.lang.Object
org.springframework.expression.spel.ast.SpelNodeImpl
org.springframework.expression.spel.ast.PropertyOrFieldReference
- All Implemented Interfaces:
- SpelNode
public class PropertyOrFieldReference
- extends SpelNodeImpl
Represents a simple property or field reference.
- Since:
- 3.0
- Author:
- Andy Clement, Juergen Hoeller, Clark Duplichien
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
nullSafe
private final boolean nullSafe
name
private final java.lang.String name
cachedReadAccessor
private volatile PropertyAccessor cachedReadAccessor
cachedWriteAccessor
private volatile PropertyAccessor cachedWriteAccessor
PropertyOrFieldReference
public PropertyOrFieldReference(boolean nullSafe,
java.lang.String propertyOrFieldName,
int pos)
isNullSafe
public boolean isNullSafe()
getName
public java.lang.String getName()
getValueInternal
public TypedValue getValueInternal(ExpressionState state)
throws EvaluationException
- Specified by:
getValueInternal
in class SpelNodeImpl
- Throws:
EvaluationException
setValue
public void setValue(ExpressionState state,
java.lang.Object newValue)
throws SpelEvaluationException
- Description copied from interface:
SpelNode
- Evaluate the expression to a node and then set the new value on that node. For example, if the expression
evaluates to a property reference then the property will be set to the new value.
- Specified by:
setValue
in interface SpelNode
- Overrides:
setValue
in class SpelNodeImpl
- Parameters:
state
- the current expression state (includes the context)newValue
- the new value
- Throws:
SpelEvaluationException
isWritable
public boolean isWritable(ExpressionState state)
throws SpelEvaluationException
- Description copied from interface:
SpelNode
- Determine if this expression node will support a setValue() call.
- Specified by:
isWritable
in interface SpelNode
- Overrides:
isWritable
in class SpelNodeImpl
- Parameters:
state
- the current expression state (includes the context)
- Returns:
- true if the expression node will allow setValue()
- Throws:
SpelEvaluationException
toStringAST
public java.lang.String toStringAST()
- Specified by:
toStringAST
in interface SpelNode
- Specified by:
toStringAST
in class SpelNodeImpl
- Returns:
- the string form of this AST node
readProperty
private TypedValue readProperty(ExpressionState state,
java.lang.String name)
throws EvaluationException
- Attempt to read the named property from the current context object.
- Parameters:
state
- the evaluation statename
- the name of the property
- Returns:
- the value of the property
- Throws:
SpelEvaluationException
- if any problem accessing the property or it cannot be found
EvaluationException
writeProperty
private void writeProperty(ExpressionState state,
java.lang.String name,
java.lang.Object newValue)
throws SpelEvaluationException
- Throws:
SpelEvaluationException
isWritableProperty
public boolean isWritableProperty(java.lang.String name,
ExpressionState state)
throws SpelEvaluationException
- Throws:
SpelEvaluationException
getPropertyAccessorsToTry
private java.util.List<PropertyAccessor> getPropertyAccessorsToTry(java.lang.Class<?> targetType,
ExpressionState state)
- Determines the set of property resolvers that should be used to try and access a property on the specified target
type. The resolvers are considered to be in an ordered list, however in the returned list any that are exact
matches for the input target type (as opposed to 'general' resolvers that could work for any type) are placed at
the start of the list. In addition, there are specific resolvers that exactly name the class in question and
resolvers that name a specific class but it is a supertype of the class we have. These are put at the end of the
specific resolvers set and will be tried after exactly matching accessors but before generic accessors.
- Parameters:
targetType
- the type upon which property access is being attempted
- Returns:
- a list of resolvers that should be tried in order to access the property