Class MapAccessor

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

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
  • Field Summary

    Fields inherited from interface org.springframework.asm.Opcodes

    AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V9
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create a new MapAccessor for reading as well as writing.
    MapAccessor(boolean allowWrite)
    Create a new MapAccessor for reading and possibly also writing.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    canRead(EvaluationContext context, @Nullable Object target, String name)
    Called to determine if this property accessor is able to read a specified property on a specified target object.
    boolean
    Called to determine if this property accessor is able to write to a specified property on a specified target object.
    void
    generateCode(String propertyName, org.springframework.asm.MethodVisitor mv, CodeFlow cf)
    Generate the bytecode that performs the access operation into the specified MethodVisitor using context information from the CodeFlow where necessary.
    Return the type of the accessed property - may only be known once an access has occurred.
    Class<?>[]
    Get the set of classes for which this accessor should be called.
    boolean
    Return true if this property accessor is currently suitable for compilation.
    read(EvaluationContext context, @Nullable Object target, String name)
    Called to read a property from a specified target object.
    void
    write(EvaluationContext context, @Nullable Object target, String name, @Nullable Object newValue)
    Called to write to a property on a specified target object.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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, org.springframework.asm.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