Class MapAccessor

java.lang.Object
org.springframework.expression.spel.support.MapAccessor
All Implemented Interfaces:
Opcodes, PropertyAccessor, CompilablePropertyAccessor, TargetedAccessor
Direct Known Subclasses:
MapAccessor

public class MapAccessor extends Object implements CompilablePropertyAccessor
SpEL PropertyAccessor that knows how to access the keys of a standard Map.
Since:
7.0
Author:
Juergen Hoeller, Andy Clement
  • Constructor Details

    • MapAccessor

      public MapAccessor()
      Create a new MapAccessor for reading as well as writing.
      See Also:
    • MapAccessor

      public MapAccessor(boolean allowWrite)
      Create a new MapAccessor for reading and possibly also writing.
      Parameters:
      allowWrite - whether to allow write operations on a target instance
      See Also:
  • Method Details

    • getSpecificTargetClasses

      public Class<?>[] getSpecificTargetClasses()
      Description copied from interface: TargetedAccessor
      Get the set of classes for which this accessor should be called.

      Returning null or an empty array indicates this is a generic accessor that can be called in an attempt to access an element on any type.

      Specified by:
      getSpecificTargetClasses in interface TargetedAccessor
      Returns:
      an array of classes that this accessor is suitable for (or null or an empty array if a generic accessor)
    • canRead

      public boolean canRead(EvaluationContext context, @Nullable Object target, String name) throws AccessException
      Description copied from interface: PropertyAccessor
      Called to determine if this property accessor is able to read a specified property on a specified target object.
      Specified by:
      canRead in interface PropertyAccessor
      Parameters:
      context - the evaluation context in which the access is being attempted
      target - the target object upon which the property is being accessed
      name - the name of the property being accessed
      Returns:
      true if this property accessor is able to read the property
      Throws:
      AccessException - if there is any problem determining whether the property can be read
    • read

      public TypedValue read(EvaluationContext context, @Nullable Object target, String name) throws AccessException
      Description copied from interface: PropertyAccessor
      Called to read a property from a specified target object.

      Should only succeed if PropertyAccessor.canRead(EvaluationContext, Object, String) also returns true.

      Specified by:
      read in interface PropertyAccessor
      Parameters:
      context - the evaluation context in which the access is being attempted
      target - the target object upon which the property is being accessed
      name - the name of the property being accessed
      Returns:
      a TypedValue object wrapping the property value read and a type descriptor for it
      Throws:
      AccessException - if there is any problem reading the property value
    • canWrite

      public boolean canWrite(EvaluationContext context, @Nullable Object target, String name) throws AccessException
      Description copied from interface: PropertyAccessor
      Called to determine if this property accessor is able to write to a specified property on a specified target object.
      Specified by:
      canWrite in interface PropertyAccessor
      Parameters:
      context - the evaluation context in which the access is being attempted
      target - the target object upon which the property is being accessed
      name - the name of the property being accessed
      Returns:
      true if this property accessor is able to write to the property
      Throws:
      AccessException - if there is any problem determining whether the property can be written to
    • write

      public void write(EvaluationContext context, @Nullable Object target, String name, @Nullable Object newValue) throws AccessException
      Description copied from interface: PropertyAccessor
      Called to write to a property on a specified target object.

      Should only succeed if PropertyAccessor.canWrite(EvaluationContext, Object, String) also returns true.

      Specified by:
      write in interface PropertyAccessor
      Parameters:
      context - the evaluation context in which the access is being attempted
      target - the target object upon which the property is being accessed
      name - the name of the property being accessed
      newValue - the new value for the property
      Throws:
      AccessException - if there is any problem writing to the property value
    • isCompilable

      public boolean isCompilable()
      Description copied from interface: CompilablePropertyAccessor
      Return true if this property accessor is currently suitable for compilation.
      Specified by:
      isCompilable in interface CompilablePropertyAccessor
    • getPropertyType

      public Class<?> getPropertyType()
      Description copied from interface: CompilablePropertyAccessor
      Return the type of the accessed property - may only be known once an access has occurred.
      Specified by:
      getPropertyType in interface CompilablePropertyAccessor
    • generateCode

      public void generateCode(String propertyName, MethodVisitor mv, CodeFlow cf)
      Description copied from interface: CompilablePropertyAccessor
      Generate the bytecode that performs the access operation into the specified MethodVisitor using context information from the CodeFlow where necessary.
      Specified by:
      generateCode in interface CompilablePropertyAccessor
      Parameters:
      propertyName - the name of the property
      mv - the ASM method visitor into which code should be generated
      cf - the current state of the expression compiler