Ich bin von org.apache.felix.scr
Annotationen zu org.osgi.service.component
Annotationen migrieren. Ich habe eine Reihe von Komponenten, die von einer gemeinsamen abstrakten Klasse erben. Im Felix-Fall kann ich eine @Component
Annotation mit der Option componentAbstract=true
für die Superklasse verwenden und dann @Reference
Annotation in der Superklasse verwenden. Ich kann nicht finden, wie man dies zu OSGI Annotationen migriert.Abstrakte Komponenten über org.osgi.service.component Annotationen
Ist es möglich, Component Annotations in einer Superklasse einer Komponente zu verwenden? Und wenn ja, was ist dann der richtige Weg, um die Eigenschaften und die Metatypgenerierung zu handhaben?
Also, was ich suche, ist so etwas wie dies
/* No component definition should be generated for the parent, as it is
abstract and cannot be instantiated */
@Component(property="parent.property=parentValue")
public abstract class Parent {
@Reference
protected Service aService;
protected activate(Map<String,Object> props) {
System.out.println("I have my parent property: "+props.get("parent.property"));
@Override
public abstract void doSomething();
}
/* For this class, the proper Component definition should be generated, also
including the information coming from the annotations in the parent */
@Component(property="child.property=childValue")
public class Child extends Parent {
@Activate
public activate(Map<String,Object> props) {
super.activate(props);
System.out.println("I have my child property: "+props.get("child.property"));
}
public void doSomething() {
aService.doSomething();
}
}
Danke für den Link. Die Erklärung ist klar, konzentriert sich aber auf die Eltern in verschiedenen Bündeln. In meinem Fall sind beide Klassen Teil desselben Bündels, also sind die Argumente nicht wirklich gültig. –
Allerdings werde ich die abstrakte Klasse in eine Factory-Komponente umschreiben und Adapter herstellen, die alle spezialisierten Implementierungen von der untergeordneten Klasse ausführen. –
Mit dem Maven Bundle Plugin können Sie die folgende Konfiguration verwenden: ' <_dsannotations-Optionen> inherit _ dsannotations-Optionen> Anleitungen> configuration>' –
Puce