Ich habe dieses Szenario, ich habe drei deklarative Dienste, die die gleiche Schnittstelle zur Verfügung stellen (sagen wir eine Leser-Schnittstelle und ich habe leserimpl1-database-readerimpl2-flache Datei-readerimpl3-Speicher). Ich möchte einen Verbraucher haben, der nur an die Datenbankimplementierung bindet. In der Komponentendefinition geben wir ihm einen Namen, so dass ich ziemlich sicher bin, dass der Name in der Registrierung ist. Wenn ich also eine Aktivierungsmethode hinzufügen soll, kann ich mit dem Namen aus dem Komponentenkontext suchen.
Ich möchte es über Bind / Unbind versuchen, obwohl ich den Dienstnamen als Parameter verwende. Ich bin mir ziemlich sicher, dass der "target" -Parameter im Komponentenreferenzelement dazu verwendet werden kann, aber ich habe nicht gefunden, wie man es benutzt.
Hat jemand anderes das getan?
Dies wäre ähnlich zu verwenden @Referenz (mapped-name="foo")
Target ist einfach ein OSGi Filter . Sie können es verwenden, um nach jeder Serviceeigenschaft zu filtern. Wenn Ihre Dienste also die Eigenschaft backend
mit den Werten file
oder database
haben, können Sie mit dem folgenden Ziel binden:
Und der Dienst mit dem Datenbank-Backend selbst registriert sich als:
%Vor%Tags und Links osgi declarative-services