Class StandardEvaluationContext
- All Implemented Interfaces:
EvaluationContext
- Direct Known Subclasses:
MethodBasedEvaluationContext
EvaluationContext implementation.
This context uses standard implementations of all applicable strategies,
based on reflection to resolve properties, methods, and fields. Note, however,
that you may need to manually configure a StandardTypeLocator with a
specific ClassLoader to ensure that the SpEL expression parser is able
to reliably locate user types. See setTypeLocator(TypeLocator) for
details.
In addition to support for setting and looking up variables as defined in
the EvaluationContext API, StandardEvaluationContext also
provides support for registering and looking up functions. The
registerFunction(...) methods provide a convenient way to register a
function as a Method or a MethodHandle; however, a function
can also be registered via setVariable(String, Object) or
setVariables(Map). Since functions share a namespace with the variables
in this evaluation context, care must be taken to ensure that function names
and variable names do not overlap.
For a simpler, builder-style context variant for data-binding purposes,
consider using SimpleEvaluationContext instead which allows for
opting into several SpEL features as needed by specific use cases.
- Since:
- 3.0
- Author:
- Andy Clement, Juergen Hoeller, Sam Brannen, Stephane Nicoll
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionCreate aStandardEvaluationContextwith a null root object.StandardEvaluationContext(Object rootObject) Create aStandardEvaluationContextwith the given root object. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddConstructorResolver(ConstructorResolver resolver) voidaddMethodResolver(MethodResolver resolver) voidaddPropertyAccessor(PropertyAccessor accessor) voidapplyDelegatesTo(StandardEvaluationContext evaluationContext) Apply the internal delegates of this instance to the specifiedevaluationContext.Return a bean resolver that can look up beans by name.Return a list of resolvers that will be asked in turn to locate a constructor.Return a list of resolvers that will be asked in turn to locate a method.Return an operator overloader that may support mathematical operations between more than the standard set of types.Return a list of accessors that will be asked in turn to read/write a property.Return the default root context object against which unqualified properties/methods/etc should be resolved.Return a type comparator for comparing pairs of objects for equality.Return a type converter that can convert (or coerce) a value from one type to another.Get the configuredTypeLocatorthat will be used to find types, either by short or fully-qualified name.lookupVariable(String name) Look up a named variable or function within this evaluation context.voidregisterFunction(String name, MethodHandle methodHandle) Register the specifiedMethodHandleas a SpEL function.voidregisterFunction(String name, Method method) Register the specifiedMethodas a SpEL function.voidregisterMethodFilter(Class<?> type, MethodFilter filter) Register aMethodFilterwhich will be called during method resolution for the specified type.booleanremoveConstructorResolver(ConstructorResolver resolver) booleanremoveMethodResolver(MethodResolver methodResolver) booleanremovePropertyAccessor(PropertyAccessor accessor) voidsetBeanResolver(BeanResolver beanResolver) voidsetConstructorResolvers(List<ConstructorResolver> constructorResolvers) voidsetMethodResolvers(List<MethodResolver> methodResolvers) voidsetOperatorOverloader(OperatorOverloader operatorOverloader) voidsetPropertyAccessors(List<PropertyAccessor> propertyAccessors) voidsetRootObject(Object rootObject) voidsetRootObject(Object rootObject, TypeDescriptor typeDescriptor) voidsetTypeComparator(TypeComparator typeComparator) voidsetTypeConverter(TypeConverter typeConverter) voidsetTypeLocator(TypeLocator typeLocator) Set theTypeLocatorto use to find types, either by short or fully-qualified name.voidsetVariable(String name, Object value) Set a named variable in this evaluation context to a specified value.voidsetVariables(Map<String, Object> variables) Set multiple named variables in this evaluation context to the specified values.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.expression.EvaluationContext
assignVariable, isAssignmentEnabled
-
Constructor Details
-
StandardEvaluationContext
public StandardEvaluationContext()Create aStandardEvaluationContextwith a null root object. -
StandardEvaluationContext
Create aStandardEvaluationContextwith the given root object.- Parameters:
rootObject- the root object to use- See Also:
-
-
Method Details
-
setRootObject
-
setRootObject
-
getRootObject
Description copied from interface:EvaluationContextReturn the default root context object against which unqualified properties/methods/etc should be resolved. This can be overridden when evaluating an expression.- Specified by:
getRootObjectin interfaceEvaluationContext
-
setPropertyAccessors
-
getPropertyAccessors
Description copied from interface:EvaluationContextReturn a list of accessors that will be asked in turn to read/write a property.- Specified by:
getPropertyAccessorsin interfaceEvaluationContext
-
addPropertyAccessor
-
removePropertyAccessor
-
setConstructorResolvers
-
getConstructorResolvers
Description copied from interface:EvaluationContextReturn a list of resolvers that will be asked in turn to locate a constructor.- Specified by:
getConstructorResolversin interfaceEvaluationContext
-
addConstructorResolver
-
removeConstructorResolver
-
setMethodResolvers
-
getMethodResolvers
Description copied from interface:EvaluationContextReturn a list of resolvers that will be asked in turn to locate a method.- Specified by:
getMethodResolversin interfaceEvaluationContext
-
addMethodResolver
-
removeMethodResolver
-
setBeanResolver
-
getBeanResolver
Description copied from interface:EvaluationContextReturn a bean resolver that can look up beans by name.- Specified by:
getBeanResolverin interfaceEvaluationContext
-
setTypeLocator
Set theTypeLocatorto use to find types, either by short or fully-qualified name.By default, a
StandardTypeLocatorwill be used.NOTE: Even if a
StandardTypeLocatoris sufficient, you may need to manually configure aStandardTypeLocatorwith a specificClassLoaderto ensure that the SpEL expression parser is able to reliably locate user types.- Parameters:
typeLocator- theTypeLocatorto use- See Also:
-
getTypeLocator
Get the configuredTypeLocatorthat will be used to find types, either by short or fully-qualified name.See
setTypeLocator(TypeLocator)for further details.- Specified by:
getTypeLocatorin interfaceEvaluationContext- See Also:
-
setTypeConverter
-
getTypeConverter
Description copied from interface:EvaluationContextReturn a type converter that can convert (or coerce) a value from one type to another.- Specified by:
getTypeConverterin interfaceEvaluationContext
-
setTypeComparator
-
getTypeComparator
Description copied from interface:EvaluationContextReturn a type comparator for comparing pairs of objects for equality.- Specified by:
getTypeComparatorin interfaceEvaluationContext
-
setOperatorOverloader
-
getOperatorOverloader
Description copied from interface:EvaluationContextReturn an operator overloader that may support mathematical operations between more than the standard set of types.- Specified by:
getOperatorOverloaderin interfaceEvaluationContext
-
setVariable
Set a named variable in this evaluation context to a specified value.If the specified
nameisnull, it will be ignored. If the specifiedvalueisnull, the named variable will be removed from this evaluation context.In contrast to
EvaluationContext.assignVariable(String,java.util.function.Supplier), this method should only be invoked programmatically when interacting directly with theEvaluationContext— for example, to provide initial configuration for the context.Note that variables and functions share a common namespace in this evaluation context. See the class-level documentation for details.
- Specified by:
setVariablein interfaceEvaluationContext- Parameters:
name- the name of the variable to setvalue- the value to be placed in the variable- See Also:
-
setVariables
Set multiple named variables in this evaluation context to the specified values.This is a convenience variant of
setVariable(String, Object).Note that variables and functions share a common namespace in this evaluation context. See the class-level documentation for details.
- Parameters:
variables- the names and values of the variables to set- See Also:
-
registerFunction
Register the specifiedMethodas a SpEL function.Note that variables and functions share a common namespace in this evaluation context. See the class-level documentation for details.
- Parameters:
name- the name of the functionmethod- theMethodto register- See Also:
-
registerFunction
Register the specifiedMethodHandleas a SpEL function.Note that variables and functions share a common namespace in this evaluation context. See the class-level documentation for details.
- Parameters:
name- the name of the functionmethodHandle- theMethodHandleto register- Since:
- 6.1
- See Also:
-
lookupVariable
Look up a named variable or function within this evaluation context.Note that variables and functions share a common namespace in this evaluation context. See the class-level documentation for details.
- Specified by:
lookupVariablein interfaceEvaluationContext- Parameters:
name- the name of the variable or function to look up- Returns:
- the value of the variable or function, or
nullif not found
-
registerMethodFilter
Register aMethodFilterwhich will be called during method resolution for the specified type.The
MethodFiltermay remove methods and/or sort the methods which will then be used by SpEL as the candidates to look through for a match.- Parameters:
type- the type for which the filter should be calledfilter- aMethodFilter, ornullto unregister a filter for the type- Throws:
IllegalStateException- if theReflectiveMethodResolveris not in use
-
applyDelegatesTo
Apply the internal delegates of this instance to the specifiedevaluationContext. Typically invoked right after the new context instance has been created to reuse the delegates. Does not modify the root object or any registered variables or functions.- Parameters:
evaluationContext- the evaluation context to update- Since:
- 6.1.1
-