Ich habe einen OSGi-Bundle mit zwei Paketen:Methode Zugang und nicht exportierte Paket
com.organization.api
dieses Paket exportiert wird.com.organization.internal
Dieses Paket wird nicht exportiert.
In com.organization.api
Ich habe eine Schnittstelle Foo
und Klasse AsbtractFoo
package com.organization.api;
public abstract class AbstractFoo implements Foo {
private int state;
@Override
public int getState(){
return this.state;
}
}
In com.organization.internal
Ich habe eine Klasse FooManager
, den Stand der Foo ändern muss. Wie man es mit der Bedingung macht, dass andere Klassen außerhalb com.organization.internal
Status von foo nicht ändern können.
package com.organization.internal;
public class FooManager {
private ???? foo = ....
public void updateFooState(){
foo.????();
}
}
Ich versuchte AbstractStatefullFoo
mit Setter von Standardzugriffs (void setState(int state)
) hinzuzufügen com.organization.internal
zu verpacken und AbstractFoo
AbstractStatefullFoo
erweitern zu machen, aber das Problem ist, dass dieser Fall andere Pakete benötigen Paket exportiert werden com.organization.internal
.
Wie kann dieses Problem in OSGi gelöst werden?
Vielen Dank für Ihre Antwort, aber ich brauche wirklich abstrakte Klassen, da sie sehr viel Implementierung enthalten, die in konkreten Klassen in anderen Bündeln vererbt wird. –
Sie können dies auch mit abstrakten Klassen dazwischen tun. Der Schlüssel besteht darin, einen OSGi-Dienst zu verwenden, und andere Bundles verwenden nur Klassen aus dem API-Paket. –