org.springframework.core

## Interface AttributeAccessor

- All Known Subinterfaces:
    AnnotatedBeanDefinition, BeanDefinition, TestContext
  All Known Implementing Classes:
    AbstractBeanDefinition, AnnotatedGenericBeanDefinition, AttributeAccessorSupport, AutowireCandidateQualifier, BeanMetadataAttributeAccessor, ChildBeanDefinition, DefaultTestContext, GenericBeanDefinition, PropertyValue, RootBeanDefinition, ScannedGenericBeanDefinition

      public interface AttributeAccessor

  Interface defining a generic contract for attaching and accessing metadata to/from arbitrary objects.
  Since:
    2.0
  Author:
    Rob Harrop, Sam Brannen

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method and Description
    --- | ---
    `String[]` | `attributeNames()` Return the names of all attributes.
    `default <T> T` | `computeAttribute(String name, Function<String,T> computeFunction)` Compute a new value for the attribute identified by `name` if necessary and set the new value in this `AttributeAccessor`.
    `Object` | `getAttribute(String name)` Get the value of the attribute identified by `name`.
    `boolean` | `hasAttribute(String name)` Return `true` if the attribute identified by `name` exists.
    `Object` | `removeAttribute(String name)` Remove the attribute identified by `name` and return its value.
    `void` | `setAttribute(String name, Object value)` Set the attribute defined by `name` to the supplied `value`.

- - ### Method Detail

    - #### setAttribute

          void setAttribute(String name,
                            @Nullable
                            Object value)

      Set the attribute defined by `name` to the supplied `value`.

      If `value` is `null`, the attribute is `removed`.

      In general, users should take care to prevent overlaps with other metadata attributes by using fully-qualified names, perhaps using class or package names as prefix.

      Parameters:
        `name` - the unique attribute key
        `value` - the attribute value to be attached

    - #### getAttribute

          @Nullable
          Object getAttribute(String name)

      Get the value of the attribute identified by `name`.

      Return `null` if the attribute doesn't exist.

      Parameters:
        `name` - the unique attribute key
      Returns:
        the current value of the attribute, if any

    - #### computeAttribute

          default <T> T computeAttribute(String name,
                                         Function<String,T> computeFunction)

      Compute a new value for the attribute identified by `name` if necessary and set the new value in this `AttributeAccessor`.

      If a value for the attribute identified by `name` already exists in this `AttributeAccessor`, the existing value will be returned without applying the supplied compute function.

      The default implementation of this method is not thread safe but can be overridden by concrete implementations of this interface.

      Type Parameters:
        `T` - the type of the attribute value
      Parameters:
        `name` - the unique attribute key
        `computeFunction` - a function that computes a new value for the attribute name; the function must not return a `null` value
      Returns:
        the existing value or newly computed value for the named attribute
      Since:
        5.3.3
      See Also:
        `getAttribute(String)`, `setAttribute(String, Object)`

    - #### removeAttribute

          @Nullable
          Object removeAttribute(String name)

      Remove the attribute identified by `name` and return its value.

      Return `null` if no attribute under `name` is found.

      Parameters:
        `name` - the unique attribute key
      Returns:
        the last value of the attribute, if any

    - #### hasAttribute

          boolean hasAttribute(String name)

      Return `true` if the attribute identified by `name` exists.

      Otherwise return `false`.

      Parameters:
        `name` - the unique attribute key

    - #### attributeNames

          String[] attributeNames()

      Return the names of all attributes.