Package org.springframework.expression.spel.standard

# Class SpelExpression

java.lang.Object
org.springframework.expression.spel.standard.SpelExpression

All Implemented Interfaces:
  `Expression`

public class SpelExpression extends Object implements Expression
A `SpelExpression` represents a parsed (valid) expression that is ready to be evaluated in a specified context. An expression can be evaluated standalone or in a specified context. During expression evaluation the context may be asked to resolve references to types, beans, properties, and methods.

Since:
  3.0
Author:
  Andy Clement, Juergen Hoeller, Sam Brannen

## Constructor Summary

Constructors
Constructor
Description
`SpelExpression(String expression, SpelNodeImpl ast, SpelParserConfiguration configuration)`
Construct an expression, only used by the parser.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`compileExpression()`
Perform expression compilation.
`SpelNode`
`getAST()`
Return the Abstract Syntax Tree for the expression.
`EvaluationContext`
`getEvaluationContext()`
Return the default evaluation context that will be used if none is supplied on an evaluation call.
`String`
`getExpressionString()`
Return the original string used to create this expression (unmodified).
`Object`
`getValue()`
Evaluate this expression in the default context and return the result of evaluation.
`<T> T`
`getValue(Class<T> expectedResultType)`
Evaluate this expression in the default context and return the result of evaluation.
`Object`
`getValue(Object rootObject)`
Evaluate this expression in the default context against the specified root object and return the result of evaluation.
`<T> T`
`getValue(Object rootObject, Class<T> expectedResultType)`
Evaluate this expression in the default context against the specified root object and return the result of evaluation.
`Object`
`getValue(EvaluationContext context)`
Evaluate this expression in the provided context and return the result of evaluation.
`<T> T`
`getValue(EvaluationContext context, Class<T> expectedResultType)`
Evaluate this expression in the provided context and return the result of evaluation.
`Object`
`getValue(EvaluationContext context, Object rootObject)`
Evaluate this expression in the provided context against the specified root object and return the result of evaluation.
`<T> T`
`getValue(EvaluationContext context, Object rootObject, Class<T> expectedResultType)`
Evaluate this expression in the provided context against the specified root object and return the result of evaluation.
`Class<?>`
`getValueType()`
Return the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object)` method using the default context.
`Class<?>`
`getValueType(Object rootObject)`
Return the most general type that can be passed to the `Expression.setValue(Object, Object)` method using the default context.
`Class<?>`
`getValueType(EvaluationContext context)`
Return the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object)` method for the given context.
`Class<?>`
`getValueType(EvaluationContext context, Object rootObject)`
Return the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object, Object)` method for the given context.
`org.springframework.core.convert.TypeDescriptor`
`getValueTypeDescriptor()`
Return a descriptor for the most general type that can be passed to one of the `setValue(...)` methods using the default context.
`org.springframework.core.convert.TypeDescriptor`
`getValueTypeDescriptor(Object rootObject)`
Return a descriptor for the most general type that can be passed to the `Expression.setValue(Object, Object)` method using the default context.
`org.springframework.core.convert.TypeDescriptor`
`getValueTypeDescriptor(EvaluationContext context)`
Return a descriptor for the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object)` method for the given context.
`org.springframework.core.convert.TypeDescriptor`
`getValueTypeDescriptor(EvaluationContext context, Object rootObject)`
Return a descriptor for the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object, Object)` method for the given context.
`boolean`
`isWritable(Object rootObject)`
Determine if this expression can be written to, i.e.
`boolean`
`isWritable(EvaluationContext context)`
Determine if this expression can be written to, i.e.
`boolean`
`isWritable(EvaluationContext context, Object rootObject)`
Determine if this expression can be written to, i.e.
`void`
`revertToInterpreted()`
Cause an expression to revert to being interpreted if it has been using a compiled form.
`void`
`setEvaluationContext(EvaluationContext evaluationContext)`
Set the evaluation context that will be used if none is specified on an evaluation call.
`void`
`setValue(Object rootObject, Object value)`
Set this expression in the default context to the value provided.
`void`
`setValue(EvaluationContext context, Object value)`
Set this expression in the provided context to the value provided.
`void`
`setValue(EvaluationContext context, Object rootObject, Object value)`
Set this expression in the provided context to the value provided.
`String`
`toStringAST()`
Produce a string representation of the Abstract Syntax Tree for the expression.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### SpelExpression

public SpelExpression(String expression, SpelNodeImpl ast, SpelParserConfiguration configuration)
Construct an expression, only used by the parser.

## Method Details

### setEvaluationContext

public void setEvaluationContext(EvaluationContext evaluationContext)
Set the evaluation context that will be used if none is specified on an evaluation call.

Parameters:
  `evaluationContext` - the evaluation context to use

### getEvaluationContext

public EvaluationContext getEvaluationContext()
Return the default evaluation context that will be used if none is supplied on an evaluation call.

Returns:
  the default evaluation context

### getExpressionString

public String getExpressionString()
Description copied from interface: `Expression`
Return the original string used to create this expression (unmodified).

Specified by:
  `getExpressionString` in interface `Expression`
Returns:
  the original expression string

### getValue

@Nullable public Object getValue() throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the default context and return the result of evaluation.

Specified by:
  `getValue` in interface `Expression`
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public <T> T getValue(@Nullable Class<T> expectedResultType) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the default context and return the result of evaluation.

If the result of the evaluation does not match (and cannot be converted to) the expected result type then an exception will be thrown.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `expectedResultType` - the type the caller would like the result to be
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public Object getValue(@Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the default context against the specified root object and return the result of evaluation.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `rootObject` - the root object against which to evaluate the expression
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public <T> T getValue(@Nullable Object rootObject, @Nullable Class<T> expectedResultType) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the default context against the specified root object and return the result of evaluation.

If the result of the evaluation does not match (and cannot be converted to) the expected result type then an exception will be thrown.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `rootObject` - the root object against which to evaluate the expression
  `expectedResultType` - the type the caller would like the result to be
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public Object getValue(EvaluationContext context) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the provided context and return the result of evaluation.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public <T> T getValue(EvaluationContext context, @Nullable Class<T> expectedResultType) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the provided context and return the result of evaluation.

If the result of the evaluation does not match (and cannot be converted to) the expected result type then an exception will be thrown.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
  `expectedResultType` - the type the caller would like the result to be
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public Object getValue(EvaluationContext context, @Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the provided context against the specified root object and return the result of evaluation.

The supplied root object will be used as an override for any default root object configured in the context.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
  `rootObject` - the root object against which to evaluate the expression
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValue

@Nullable public <T> T getValue(EvaluationContext context, @Nullable Object rootObject, @Nullable Class<T> expectedResultType) throws EvaluationException
Description copied from interface: `Expression`
Evaluate this expression in the provided context against the specified root object and return the result of evaluation.

The supplied root object will be used as an override for any default root object configured in the context.

If the result of the evaluation does not match (and cannot be converted to) the expected result type then an exception will be thrown.

Specified by:
  `getValue` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
  `rootObject` - the root object against which to evaluate the expression
  `expectedResultType` - the type the caller would like the result to be
Returns:
  the evaluation result
Throws:
  `EvaluationException` - if there is a problem during evaluation

### getValueType

@Nullable public Class<?> getValueType() throws EvaluationException
Description copied from interface: `Expression`
Return the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object)` method using the default context.

Specified by:
  `getValueType` in interface `Expression`
Returns:
  the most general type of value that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueType

@Nullable public Class<?> getValueType(@Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Return the most general type that can be passed to the `Expression.setValue(Object, Object)` method using the default context.

Specified by:
  `getValueType` in interface `Expression`
Parameters:
  `rootObject` - the root object against which to evaluate the expression
Returns:
  the most general type of value that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueType

@Nullable public Class<?> getValueType(EvaluationContext context) throws EvaluationException
Description copied from interface: `Expression`
Return the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object)` method for the given context.

Specified by:
  `getValueType` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
Returns:
  the most general type of value that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueType

@Nullable public Class<?> getValueType(EvaluationContext context, @Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Return the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object, Object)` method for the given context.

The supplied root object will be used as an override for any default root object configured in the context.

Specified by:
  `getValueType` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
  `rootObject` - the root object against which to evaluate the expression
Returns:
  the most general type of value that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueTypeDescriptor

@Nullable public org.springframework.core.convert.TypeDescriptor getValueTypeDescriptor() throws EvaluationException
Description copied from interface: `Expression`
Return a descriptor for the most general type that can be passed to one of the `setValue(...)` methods using the default context.

Specified by:
  `getValueTypeDescriptor` in interface `Expression`
Returns:
  a type descriptor for values that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueTypeDescriptor

@Nullable public org.springframework.core.convert.TypeDescriptor getValueTypeDescriptor(@Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Return a descriptor for the most general type that can be passed to the `Expression.setValue(Object, Object)` method using the default context.

Specified by:
  `getValueTypeDescriptor` in interface `Expression`
Parameters:
  `rootObject` - the root object against which to evaluate the expression
Returns:
  a type descriptor for values that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueTypeDescriptor

@Nullable public org.springframework.core.convert.TypeDescriptor getValueTypeDescriptor(EvaluationContext context) throws EvaluationException
Description copied from interface: `Expression`
Return a descriptor for the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object)` method for the given context.

Specified by:
  `getValueTypeDescriptor` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
Returns:
  a type descriptor for values that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### getValueTypeDescriptor

@Nullable public org.springframework.core.convert.TypeDescriptor getValueTypeDescriptor(EvaluationContext context, @Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Return a descriptor for the most general type that can be passed to the `Expression.setValue(EvaluationContext, Object, Object)` method for the given context.

The supplied root object will be used as an override for any default root object configured in the context.

Specified by:
  `getValueTypeDescriptor` in interface `Expression`
Parameters:
  `context` - the context in which to evaluate the expression
  `rootObject` - the root object against which to evaluate the expression
Returns:
  a type descriptor for values that can be set in this context
Throws:
  `EvaluationException` - if there is a problem determining the type

### isWritable

public boolean isWritable(@Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Determine if this expression can be written to, i.e. setValue() can be called.

Specified by:
  `isWritable` in interface `Expression`
Parameters:
  `rootObject` - the root object against which to evaluate the expression
Returns:
  `true` if the expression is writable; `false` otherwise
Throws:
  `EvaluationException` - if there is a problem determining if it is writable

### isWritable

public boolean isWritable(EvaluationContext context) throws EvaluationException
Description copied from interface: `Expression`
Determine if this expression can be written to, i.e. setValue() can be called.

Specified by:
  `isWritable` in interface `Expression`
Parameters:
  `context` - the context in which the expression should be checked
Returns:
  `true` if the expression is writable; `false` otherwise
Throws:
  `EvaluationException` - if there is a problem determining if it is writable

### isWritable

public boolean isWritable(EvaluationContext context, @Nullable Object rootObject) throws EvaluationException
Description copied from interface: `Expression`
Determine if this expression can be written to, i.e. setValue() can be called.

The supplied root object will be used as an override for any default root object configured in the context.

Specified by:
  `isWritable` in interface `Expression`
Parameters:
  `context` - the context in which the expression should be checked
  `rootObject` - the root object against which to evaluate the expression
Returns:
  `true` if the expression is writable; `false` otherwise
Throws:
  `EvaluationException` - if there is a problem determining if it is writable

### setValue

public void setValue(@Nullable Object rootObject, @Nullable Object value) throws EvaluationException
Description copied from interface: `Expression`
Set this expression in the default context to the value provided.

Specified by:
  `setValue` in interface `Expression`
Parameters:
  `rootObject` - the root object against which to evaluate the expression
  `value` - the new value
Throws:
  `EvaluationException` - if there is a problem during evaluation

### setValue

public void setValue(EvaluationContext context, @Nullable Object value) throws EvaluationException
Description copied from interface: `Expression`
Set this expression in the provided context to the value provided.

Specified by:
  `setValue` in interface `Expression`
Parameters:
  `context` - the context in which to set the value of the expression
  `value` - the new value
Throws:
  `EvaluationException` - if there is a problem during evaluation

### setValue

public void setValue(EvaluationContext context, @Nullable Object rootObject, @Nullable Object value) throws EvaluationException
Description copied from interface: `Expression`
Set this expression in the provided context to the value provided.

The supplied root object will be used as an override for any default root object configured in the context.

Specified by:
  `setValue` in interface `Expression`
Parameters:
  `context` - the context in which to set the value of the expression
  `rootObject` - the root object against which to evaluate the expression
  `value` - the new value
Throws:
  `EvaluationException` - if there is a problem during evaluation

### compileExpression

public boolean compileExpression()
Perform expression compilation. This will only succeed once exit descriptors for all nodes have been determined. If the compilation fails and has failed more than 100 times the expression is no longer considered suitable for compilation.

Returns:
  whether this expression has been successfully compiled

### revertToInterpreted

public void revertToInterpreted()
Cause an expression to revert to being interpreted if it has been using a compiled form. It also resets the compilation attempt failure count (an expression is normally no longer considered compilable if it cannot be compiled after 100 attempts).

### getAST

public SpelNode getAST()
Return the Abstract Syntax Tree for the expression.

### toStringAST

public String toStringAST()
Produce a string representation of the Abstract Syntax Tree for the expression. This should ideally look like the input expression, but properly formatted since any unnecessary whitespace will have been discarded during the parse of the expression.

Returns:
  the string representation of the AST