Top Description Methods
org.osgi.service.component.annotations

public @Interface Reference

extends Annotation
Annotations
@Retention:CLASS
@Target:METHOD, FIELD, PARAMETER
Imports
java.lang.annotation.ElementType, .Retention, .RetentionPolicy, .Target, org.osgi.service.component.AnyService

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.

Author
$Id: 3795837efc16f0270ec7f9df16e1bc0260dbb601 $
See Also
The reference element of a Component Description.

Method Summary

Modifier and TypeMethod and Description
public String
bind()

The name of the bind method for this reference.

public ReferenceCardinality
cardinality()

The cardinality of this reference.

public CollectionType
collectionType()

The collection type for this reference.

public String
field()

The name of the field for this reference.

public FieldOption
fieldOption()

The field option for this reference.

public String
name()

The name of this reference.

public int
parameter()

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

public ReferencePolicy
policy()

The policy for this reference.

public ReferencePolicyOption
policyOption()

The policy option for this reference.

public ReferenceScope
scope()

The reference scope for this reference.

public Class<?>
service()

The type of the service for this reference.

public String
target()

The target property for this reference.

public String
unbind()

The name of the unbind method for this reference.

public String
updated()

The name of the updated method for this reference.

Inherited from java.lang.annotation.Annotation:
annotationTypeequalshashCodetoString

Method Detail

bindback to summary
public 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.
cardinalityback to summary
public ReferenceCardinality 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.
collectionTypeback to summary
public 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.
fieldback to summary
public 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.
fieldOptionback to summary
public 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.
nameback to summary
public 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.
parameterback to summary
public 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.
policyback to summary
public ReferencePolicy 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.
policyOptionback to summary
public 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.
scopeback to summary
public ReferenceScope 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.
serviceback to summary
public 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
targetback to summary
public 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.
unbindback to summary
public 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.
updatedback to summary
public 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.