org.springframework.expression.spel.support

Class ReflectivePropertyAccessor.OptimalPropertyAccessor

  • java.lang.Object
    • org.springframework.expression.spel.support.ReflectivePropertyAccessor.OptimalPropertyAccessor
  • All Implemented Interfaces:
    Opcodes, PropertyAccessor, CompilablePropertyAccessor
    Enclosing class:
    ReflectivePropertyAccessor


    public static class ReflectivePropertyAccessor.OptimalPropertyAccessor
    extends java.lang.Object
    implements CompilablePropertyAccessor
    An optimized form of a PropertyAccessor that will use reflection but only knows how to access a particular property on a particular class. This is unlike the general ReflectivePropertyResolver which manages a cache of methods/fields that may be invoked to access different properties on different classes. This optimal accessor exists because looking up the appropriate reflective object by class/name on each read is not cheap.
    • Field Detail

      • member

        public final java.lang.reflect.Member member
        The member being accessed.
    • Method Detail

      • getSpecificTargetClasses

        @Nullable
        public java.lang.Class<?>[] getSpecificTargetClasses()
        Description copied from interface: PropertyAccessor
        Return an array of classes for which this resolver should be called.

        >Returning null indicates this is a general resolver that can be called in an attempt to resolve a property on any type.

        Specified by:
        getSpecificTargetClasses in interface PropertyAccessor
        Returns:
        an array of classes that this resolver is suitable for (or null if a general resolver)
      • canRead

        public boolean canRead(EvaluationContext context,
                               @Nullable
                               java.lang.Object target,
                               java.lang.String name)
                        throws AccessException
        Description copied from interface: PropertyAccessor
        Called to determine if a resolver instance is able to access 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 resolver is able to read the property
        Throws:
        AccessException - if there is any problem determining whether the property can be read
      • canWrite

        public boolean canWrite(EvaluationContext context,
                                @Nullable
                                java.lang.Object target,
                                java.lang.String name)
        Description copied from interface: PropertyAccessor
        Called to determine if a resolver instance 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 resolver is able to write to the property
      • generateCode

        public void generateCode(java.lang.String propertyName,
                                 MethodVisitor mv,
                                 CodeFlow cf)
        Description copied from interface: CompilablePropertyAccessor
        Generate the bytecode the 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