Annotation Interface Reference


@Retention(CLASS) @Target({METHOD,FIELD,PARAMETER}) public @interface Reference
Identify the annotated member or parameter as a reference of a Service Component.

When the annotation is applied to a method, the method is the bind method of the reference.

When the annotation is applied to a field, the field will contain the bound service(s) of the reference.

When the annotation is applied to a parameter of a constructor, the parameter will contain the bound service(s) of the reference.

This annotation is not processed at runtime by Service Component Runtime. It must be processed by tools and used to add a Component Description to the bundle.

In the generated Component Description for a component, the references must be ordered in ascending lexicographical order (using String.compareTo ) of the reference names.

See Also:
  • "The reference element of a Component Description."
  • Element Details

    • name

      String name
      The name of this reference.

      The name of this reference must be specified when using this annotation in the Component.reference() element since there is no annotated member from which the name can be determined. If not specified, the name of this reference is based upon how this annotation is used:

      • Annotated method - If the method name begins with bind, set or add, that prefix is removed to create the name of the reference. Otherwise, the name of the reference is the method name.
      • Annotated field - The name of the reference is the field name.
      • Annotated constructor parameter - The name of the reference is the parameter name.
      See Also:
      • "The name attribute of the reference element of a Component Description."
      Default:
      ""
    • service

      Class<?> service
      The type of the service for this reference.

      The type of the service for this reference must be specified when using this annotation in the Component.reference() element since there is no annotated member from which the type of the service can be determined.

      If not specified, the type of the service for this reference is based upon how this annotation is used:

      • Annotated method - The type of the service is the type of the first parameter of the method.
      • Annotated field - The type of the service is based upon the cardinality of the reference and the type of the field being annotated. If the cardinality is either 0..n, or 1..n, the type of the field must be one of java.util.Collection, java.util.List, or a subtype of java.util.Collection, so the type of the service is the generic type of the collection. If the cardinality is either 0..1 or 1..1, and the type of the field is java.util.Optional, the type of the service is the generic type of the java.util.Optional. Otherwise, the type of the service is the type of the field.
      • Annotated constructor parameter - The type of the service is based upon the cardinality of the reference and the type of the parameter being annotated. If the cardinality is either 0..n, or 1..n, the type of the parameter must be one of java.util.Collection or java.util.List, so the type of the service is the generic type of the collection. If the cardinality is either 0..1 or 1..1, and the type of the parameter is java.util.Optional, the type of the service is the generic type of the java.util.Optional. Otherwise, the type of the service is the type of the parameter.
      See Also:
      • "The interface attribute of the reference element of a Component Description."
      • AnyService
      Default:
      java.lang.Object.class
    • cardinality

      The cardinality of this reference.

      If not specified, the cardinality of this reference is based upon how this annotation is used:

      • Annotated method - The cardinality is 1..1.
      • Annotated field - The cardinality is based on the type of the field. If the type is either java.util.Collection, java.util.List, or a subtype of java.util.Collection, the cardinality is 0..n. If the type is java.util.Optional, the cardinality is 0..1. Otherwise the cardinality is 1..1.
      • Annotated constructor parameter - The cardinality is based on the type of the parameter. If the type is either java.util.Collection or java.util.List, the cardinality is 0..n. If the type is java.util.Optional, the cardinality is 0..1. Otherwise the cardinality is 1..1.
      • Component.reference() element - The cardinality is 1..1.
      See Also:
      • "The cardinality attribute of the reference element of a Component Description."
      Default:
      MANDATORY
    • policy

      The policy for this reference.

      If not specified, the policy of this reference is based upon how this annotation is used:

      • Annotated method - The policy is STATIC.
      • Annotated field - The policy is based on the modifiers of the field. If the field is declared volatile, the policy is ReferencePolicy.DYNAMIC. Otherwise the policy is STATIC.
      • Annotated constructor parameter - The policy is STATIC. STATIC policy must be used for constructor parameters.
      • Component.reference() element - The policy is STATIC.
      See Also:
      • "The policy attribute of the reference element of a Component Description."
      Default:
      STATIC
    • target

      String target
      The target property for this reference.

      If not specified, no target property is set. A target property must be specified if the service() element refers to AnyService.

      See Also:
      • "The target attribute of the reference element of a Component Description."
      Default:
      ""
    • policyOption

      ReferencePolicyOption policyOption
      The policy option for this reference.

      If not specified, the RELUCTANT reference policy option is used.

      Since:
      1.2
      See Also:
      • "The policy-option attribute of the reference element of a Component Description."
      Default:
      RELUCTANT
    • scope

      The reference scope for this reference.

      If not specified, the bundle reference scope is used.

      Since:
      1.3
      See Also:
      • "The scope attribute of the reference element of a Component Description."
      Default:
      BUNDLE
    • bind

      String bind
      The name of the bind method for this reference.

      If specified and this reference annotates a method, the specified name must match the name of the annotated method.

      If not specified, the name of the bind method is based upon how this annotation is used:

      • Annotated method - The name of the annotated method is the name of the bind method.
      • Annotated field - There is no bind method name.
      • Annotated constructor parameter - There is no bind method name.
      • Component.reference() element - There is no bind method name.

      If there is a bind method name, the component must contain a method with that name.

      Since:
      1.3
      See Also:
      • "The bind attribute of the reference element of a Component Description."
      Default:
      ""
    • updated

      String updated
      The name of the updated method for this reference.

      If not specified, the name of the updated method is based upon how this annotation is used:

      • Annotated method - The name of the updated method is created from the name of the annotated method. If the name of the annotated method begins with bind, set or add, that prefix is replaced with updated to create the name candidate for the updated method. Otherwise, updated is prefixed to the name of the annotated method to create the name candidate for the updated method. If the component type contains a method with the candidate name, the candidate name is used as the name of the updated method. To declare no updated method when the component type contains a method with the candidate name, the value "-" must be used.
      • Annotated field - There is no updated method name.
      • Annotated constructor parameter - There is no updated method name.
      • Component.reference() element - There is no updated method name.

      If there is an updated method name, the component must contain a method with that name.

      Since:
      1.2
      See Also:
      • "The updated attribute of the reference element of a Component Description."
      Default:
      ""
    • unbind

      String unbind
      The name of the unbind method for this reference.

      If not specified, the name of the unbind method is based upon how this annotation is used:

      • Annotated method - The name of the unbind method is created from the name of the annotated method. If the name of the annotated method begins with bind, set or add, that prefix is replaced with unbind, unset or remove, respectively, to create the name candidate for the unbind method. Otherwise, un is prefixed to the name of the annotated method to create the name candidate for the unbind method. If the component type contains a method with the candidate name, the candidate name is used as the name of the unbind method. To declare no unbind method when the component type contains a method with the candidate name, the value "-" must be used.
      • Annotated field - There is no unbind method name.
      • Annotated constructor parameter - There is no unbind method name.
      • Component.reference() element - There is no unbind method name.

      If there is an unbind method name, the component must contain a method with that name.

      See Also:
      • "The unbind attribute of the reference element of a Component Description."
      Default:
      ""
    • field

      String field
      The name of the field for this reference.

      If specified and this reference annotates a field, the specified name must match the name of the annotated field.

      If not specified, the name of the field is based upon how this annotation is used:

      • Annotated method - There is no field name.
      • Annotated field - The name of the annotated field is the name of the field.
      • Annotated constructor parameter - There is no field name.
      • Component.reference() element - There is no field name.

      If there is a field name, the component must contain a field with that name.

      Since:
      1.3
      See Also:
      • "The field attribute of the reference element of a Component Description."
      Default:
      ""
    • fieldOption

      FieldOption fieldOption
      The field option for this reference.

      If not specified, the field option is based upon how this annotation is used:

      • Annotated method - There is no field option.
      • Annotated field - The field option is based upon the policy and cardinality of the reference and the modifiers of the field. If the policy is ReferencePolicy.DYNAMIC, the cardinality is 0..n or 1..n, and the field is declared final, the field option is FieldOption.UPDATE. Otherwise, the field option is FieldOption.REPLACE.
      • Annotated constructor parameter - There is no field option.
      • Component.reference() element - There is no field option.
      Since:
      1.3
      See Also:
      • "The field-option attribute of the reference element of a Component Description."
      Default:
      REPLACE
    • parameter

      int parameter
      The zero-based parameter number of the constructor parameter for this reference.

      If specified and this reference annotates an constructor parameter, the specified value must match the zero-based parameter number of the annotated constructor parameter.

      If not specified, the parameter number is based upon how this annotation is used:

      • Annotated method - There is no parameter number.
      • Annotated field - There is no parameter number.
      • Annotated constructor parameter - The zero-based parameter number of the parameter.
      • Component.reference() element - There is no parameter number.

      If there is a parameter number, the component must declare a constructor that has a parameter having the zero-based parameter number.

      Since:
      1.4
      See Also:
      • "The parameter attribute of the reference element of a Component Description."
      • "The init attribute of the component element of a Component Description."
      Default:
      0
    • collectionType

      CollectionType collectionType
      The collection type for this reference.

      If not specified, the collection type is based upon how this annotation is used:

      • Annotated method - There is no collection type.
      • Annotated field - The collection type is based upon the cardinality of the reference and the type of the field. If the cardinality is either 0..n or 1..n, the collection type is inferred from the generic type of the java.util.Collection. If the cardinality is either 0..1 or 1..1, and the type of the field is java.util.Optional, the collection type is inferred from the generic type of the java.util.Optional. Otherwise, there is no collection type
      • Annotated constructor method parameter - The collection type is based upon the cardinality of the reference and the type of the parameter. If the cardinality is either 0..n or 1..n, the collection type is inferred from the generic type of the java.util.Collection. If the cardinality is either 0..1 or 1..1, and the type of the parameter is java.util.Optional, the collection type is inferred from the generic type of the java.util.Optional. Otherwise, there is no collection type
      • Component.reference() element - There is no collection type.
      Since:
      1.4
      See Also:
      • "The field-collection-type attribute of the reference element of a Component Description."
      Default:
      SERVICE