Annotation Type ServiceProvider


  • @Retention(CLASS)
    @Target({PACKAGE,TYPE})
    @Repeatable(ServiceProviders.class)
    @Capability(name="${#value}",namespace="osgi.serviceloader",attribute={"register:=${#register}","${if;${size;${#uses}};uses:=\'${#uses}\'}","${sjoin;\\;;${#attribute}}"}) @Capability(namespace="osgi.service",attribute={"objectClass:List<String>=\"${#value}\"","${if;${size;${#uses}};uses:=\'${#uses}\'}","${sjoin;\\;;${#attribute}}"},effective="active")
    @Requirement(name="osgi.serviceloader.registrar",
                 namespace="osgi.extender",
                 version="1.0.0",
                 attribute={"${if;${size;${#effective}};effective:=${#effective}}","${if;${is;${#resolution};default};;resolution:=${#resolution}}"})
    public @interface ServiceProvider
    Annotation used to generate requirements and capabilities necessary for supporting the provider side of the Service Loader Mediator specification.

    Also results in the automatic generation of service descriptor files (a.k.a. META-INF/services).

    See Also:
    Service Loader Mediator
    • Required Element Summary

      Required Elements 
      Modifier and Type Required Element Description
      java.lang.Class<?> value
      The service type.
    • Optional Element Summary

      Optional Elements 
      Modifier and Type Optional Element Description
      java.lang.String[] attribute
      A list of attribute or directive names and values.
      java.lang.String effective
      The effective time of the osgi.extender requirement.
      java.lang.Class<?> register
      The type to register as the provider.
      Resolution resolution
      The resolution policy of the osgi.extender requirement.
      java.lang.Class<?>[] uses
      A list of classes whose packages are inspected to calculate the uses directive for this capability.
    • Element Detail

      • value

        java.lang.Class<?> value
        The service type.
        Returns:
        the service type
      • effective

        java.lang.String effective
        The effective time of the osgi.extender requirement.

        Specifies the time the osgi.extender requirements are available. The OSGi framework resolver only considers requirements without an effective directive or effective:=resolve. Requirements with other values for the effective directive can be considered by an external agent.

        If not specified, the effective directive is omitted from the requirement clause.

        Default:
        ""
      • uses

        java.lang.Class<?>[] uses
        A list of classes whose packages are inspected to calculate the uses directive for this capability.

        If not specified, the uses directive is omitted from the capability clause.

        Default:
        {}
      • attribute

        java.lang.String[] attribute
        A list of attribute or directive names and values.

        Each string should be specified in the form:

        • "name=value" for attributes.
        • "name:type=value" for typed attributes.
        • "name:=value" for directives.
        These are added, separated by semicolons, to the osgi.serviceloader capability. Non-standard osgi.serviceloader attributes will be included as service properties to the published service.
        Default:
        {}
      • resolution

        Resolution resolution
        The resolution policy of the osgi.extender requirement.

        A mandatory requirement forbids the bundle to resolve when this requirement is not satisfied; an optional requirement allows a bundle to resolve even if this requirement is not satisfied.

        If not specified, the resolution directive is omitted from the requirement clause.

        Default:
        aQute.bnd.annotation.Resolution.DEFAULT
      • register

        java.lang.Class<?> register
        The type to register as the provider.

        If the annotation used on a package, then register() must be set. It is optional when used on a type using the type as the value.

        The register directive is omitted from the requirement clause.

        Default:
        java.lang.annotation.Target.class