# Annotation Type Resource

@Target({TYPE,FIELD,METHOD}) @Retention(RUNTIME) @Repeatable(Resources.class) public @interface Resource
Indicates a resource required by the application. Annotated classes will be used as resources. Annotated fields and/or methods will have resources injected.

Since:
  Common Annotations 1.0

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static enum`
  `Resource.AuthenticationType`
  The AuthenticationType, either CONTAINER or APPLICATION

- ## Optional Element Summary

  Optional Elements
  Modifier and Type
  Optional Element
  Description
  `Resource.AuthenticationType`
  `authenticationType`
  Specifies the authentication type for the resource.
  `String`
  `description`
  Provides a human-readable description of the resource for documentation and administrative purposes.
  `String`
  `lookup`
  Specifies the JNDI lookup name for the resource.
  `String`
  `mappedName`
  Specifies a product-dependent name for the resource, allowing the container to map the logical resource name to a physical resource in a vendor-specific manner.
  `String`
  `name`
  Specifies the logical name of the resource.
  `boolean`
  `shareable`
  Indicates whether the resource can be shared among multiple injection points.
  `Class<?>`
  `type`
  Uses generics since Common Annotations 1.2.

- ## Element Details

  - ### name

    String name
    Specifies the logical name of the resource. If not specified, the container derives the name from the field or method to which the annotation is applied.
    Returns:
      the logical name of the resource
    Default:
      `""`

  - ### type

    Class<?> type
    Uses generics since Common Annotations 1.2.
    Returns:
      The type for instances of this resource
    Default:
      `java.lang.Object.class`

  - ### authenticationType

    Resource.AuthenticationType authenticationType
    Specifies the authentication type for the resource. Container authentication means the container handles authentication, while application authentication means the application code is responsible for authentication.
    Returns:
      the authentication type, defaulting to `Resource.AuthenticationType.CONTAINER`
    Default:
      `CONTAINER`

  - ### shareable

    boolean shareable
    Indicates whether the resource can be shared among multiple injection points. When true, the same resource instance may be injected into multiple components. When false, each injection point receives a distinct resource instance.
    Returns:
      true if the resource is shareable across injection points, false otherwise
    Default:
      `true`

  - ### description

    String description
    Provides a human-readable description of the resource for documentation and administrative purposes.
    Returns:
      the resource description
    Default:
      `""`

  - ### mappedName

    String mappedName
    Specifies a product-dependent name for the resource, allowing the container to map the logical resource name to a physical resource in a vendor-specific manner. This is typically used for environment-specific configuration.
    Returns:
      the product-specific mapped name for the resource
    Default:
      `""`

  - ### lookup

    String lookup
    Specifies the JNDI lookup name for the resource. This attribute allows explicit control over the JNDI name used to locate the resource, overriding the default name derivation. The lookup name is typically prefixed with "java:comp/env/" for component environment entries.
    Returns:
      the JNDI lookup name for the resource
    Since:
      Common Annotations 1.1
    Default:
      `""`