Class StandardEvaluationContext

java.lang.Object
org.springframework.expression.spel.support.StandardEvaluationContext
All Implemented Interfaces:
EvaluationContext

public class StandardEvaluationContext extends Object implements EvaluationContext
A powerful and highly configurable 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.

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 Details

  • Method Details

    • setRootObject

      public void setRootObject(@Nullable Object rootObject, org.springframework.core.convert.TypeDescriptor typeDescriptor)
    • setRootObject

      public void setRootObject(@Nullable Object rootObject)
    • getRootObject

      public TypedValue getRootObject()
      Description copied from interface: EvaluationContext
      Return the default root context object against which unqualified properties/methods/etc should be resolved. This can be overridden when evaluating an expression.
      Specified by:
      getRootObject in interface EvaluationContext
    • setPropertyAccessors

      public void setPropertyAccessors(List<PropertyAccessor> propertyAccessors)
    • getPropertyAccessors

      public List<PropertyAccessor> getPropertyAccessors()
      Description copied from interface: EvaluationContext
      Return a list of accessors that will be asked in turn to read/write a property.
      Specified by:
      getPropertyAccessors in interface EvaluationContext
    • addPropertyAccessor

      public void addPropertyAccessor(PropertyAccessor accessor)
    • removePropertyAccessor

      public boolean removePropertyAccessor(PropertyAccessor accessor)
    • setConstructorResolvers

      public void setConstructorResolvers(List<ConstructorResolver> constructorResolvers)
    • getConstructorResolvers

      public List<ConstructorResolver> getConstructorResolvers()
      Description copied from interface: EvaluationContext
      Return a list of resolvers that will be asked in turn to locate a constructor.
      Specified by:
      getConstructorResolvers in interface EvaluationContext
    • addConstructorResolver

      public void addConstructorResolver(ConstructorResolver resolver)
    • removeConstructorResolver

      public boolean removeConstructorResolver(ConstructorResolver resolver)
    • setMethodResolvers

      public void setMethodResolvers(List<MethodResolver> methodResolvers)
    • getMethodResolvers

      public List<MethodResolver> getMethodResolvers()
      Description copied from interface: EvaluationContext
      Return a list of resolvers that will be asked in turn to locate a method.
      Specified by:
      getMethodResolvers in interface EvaluationContext
    • addMethodResolver

      public void addMethodResolver(MethodResolver resolver)
    • removeMethodResolver

      public boolean removeMethodResolver(MethodResolver methodResolver)
    • setBeanResolver

      public void setBeanResolver(BeanResolver beanResolver)
    • getBeanResolver

      @Nullable public BeanResolver getBeanResolver()
      Description copied from interface: EvaluationContext
      Return a bean resolver that can look up beans by name.
      Specified by:
      getBeanResolver in interface EvaluationContext
    • setTypeLocator

      public void setTypeLocator(TypeLocator typeLocator)
      Set the TypeLocator to use to find types, either by short or fully-qualified name.

      By default, a StandardTypeLocator will be used.

      NOTE: Even if a StandardTypeLocator is sufficient, 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.

      Parameters:
      typeLocator - the TypeLocator to use
      See Also:
    • getTypeLocator

      public TypeLocator getTypeLocator()
      Get the configured TypeLocator that will be used to find types, either by short or fully-qualified name.

      See setTypeLocator(TypeLocator) for further details.

      Specified by:
      getTypeLocator in interface EvaluationContext
      See Also:
    • setTypeConverter

      public void setTypeConverter(TypeConverter typeConverter)
    • getTypeConverter

      public TypeConverter getTypeConverter()
      Description copied from interface: EvaluationContext
      Return a type converter that can convert (or coerce) a value from one type to another.
      Specified by:
      getTypeConverter in interface EvaluationContext
    • setTypeComparator

      public void setTypeComparator(TypeComparator typeComparator)
    • getTypeComparator

      public TypeComparator getTypeComparator()
      Description copied from interface: EvaluationContext
      Return a type comparator for comparing pairs of objects for equality.
      Specified by:
      getTypeComparator in interface EvaluationContext
    • setOperatorOverloader

      public void setOperatorOverloader(OperatorOverloader operatorOverloader)
    • getOperatorOverloader

      public OperatorOverloader getOperatorOverloader()
      Description copied from interface: EvaluationContext
      Return an operator overloader that may support mathematical operations between more than the standard set of types.
      Specified by:
      getOperatorOverloader in interface EvaluationContext
    • setVariable

      public void setVariable(@Nullable String name, @Nullable Object value)
      Description copied from interface: EvaluationContext
      Set a named variable in this evaluation context to a specified value.

      In contrast to EvaluationContext.assignVariable(String, Supplier), this method should only be invoked programmatically when interacting directly with the EvaluationContext — for example, to provide initial configuration for the context.

      Specified by:
      setVariable in interface EvaluationContext
      Parameters:
      name - the name of the variable to set
      value - the value to be placed in the variable
    • setVariables

      public void setVariables(Map<String,Object> variables)
      Set multiple named variables in this evaluation context to given values.

      This is a convenience variant of setVariable(String, Object).

      Parameters:
      variables - the names and values of the variables to set
      See Also:
    • registerFunction

      public void registerFunction(String name, Method method)
      Register the specified Method as a SpEL function.

      Note: Function names share a namespace with the variables in this evaluation context, as populated by setVariable(String, Object). Make sure that specified function names and variable names do not overlap.

      Parameters:
      name - the name of the function
      method - the Method to register
      See Also:
    • registerFunction

      public void registerFunction(String name, MethodHandle methodHandle)
      Register the specified MethodHandle as a SpEL function.

      Note: Function names share a namespace with the variables in this evaluation context, as populated by setVariable(String, Object). Make sure that specified function names and variable names do not overlap.

      Parameters:
      name - the name of the function
      methodHandle - the MethodHandle to register
      Since:
      6.1
      See Also:
    • lookupVariable

      @Nullable public Object lookupVariable(String name)
      Description copied from interface: EvaluationContext
      Look up a named variable within this evaluation context.
      Specified by:
      lookupVariable in interface EvaluationContext
      Parameters:
      name - the name of the variable to look up
      Returns:
      the value of the variable, or null if not found
    • registerMethodFilter

      public void registerMethodFilter(Class<?> type, MethodFilter filter) throws IllegalStateException
      Register a MethodFilter which will be called during method resolution for the specified type.

      The MethodFilter may 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 called
      filter - a MethodFilter, or null to unregister a filter for the type
      Throws:
      IllegalStateException - if the ReflectiveMethodResolver is not in use
    • applyDelegatesTo

      public void applyDelegatesTo(StandardEvaluationContext evaluationContext)
      Apply the internal delegates of this instance to the specified evaluationContext. Typically invoked right after the new context instance has been created to reuse the delegates. Do not modify the root object or any registered variables.
      Parameters:
      evaluationContext - the evaluation context to update
      Since:
      6.1.1