在一個OSGi應用程序我有一個類層次結構如下:的getClass()在抽象類返回隨機實現類
public interface IA {
public void someMethod();
}
public abstract class AbstractA implements IA {
public void someMethod(SomeObject s) {
System.out.println(this.getClass());
}
}
public class ImplAA extends AbstractA {
//Some other methods
}
public class ImplAB extends AbstractA {
//Some other methods
}
接口,抽象類和實現是在4個不同的束。 另一束包含一個類看起來像這樣:
public class SomeClass {
private IA implAAInstance;
private IA implABInstance;
protected void bindToAA(IA ia) {
implAAInstance = ia;
}
protected void bindToAB(IA ia) {
implABInstance = ia;
}
protected void sendStuff(SomeObject p, SomeObject q) {
implAAInstance.someMethod(p);
implABInstance.someMethod(q);
}
}
方法bindToAA
和bindToAB
可用於結合包含類ImplAA
和ImplAB
分別束綁定功能。 在XML組件定義這個看起來如下:
<reference bind="bindToAA" cardinality="0..1" interface="path.to.IA" name="ImplAA" policy="dynamic"/>
<reference bind="bindToAB" cardinality="0..1" interface="path.to.IA" name="ImplAB" policy="dynamic"/>
在包含ImplAA
和ImplAB
束,有一個在XML組件定義這一重要線:
<implementation class="path.to.ImplAA"/>
<service>
<provide interface="path.to.IA"/>
</service>
和
<implementation class="path.to.ImplAB"/>
<service>
<provide interface="path.to.IA"/>
</service>
現在的問題是,當我運行代碼時,會打印兩次使用ImplAA
。 這是什麼原因?我怎樣才能讓它打印正確的實現類?
大量信息丟失。您是否將ImplAA和ImplAB的實例發佈爲服務?你似乎在說'SomeClass'是DS組件,如果是的話,你的DS聲明是什麼樣的?據我目前所見,輸出沒有任何問題。你要求一個IA實例,而ImplAA是一個實例。有什麼問題? –
我編輯了這個問題,確切的問題是我不想要一些IA的隨機實現類,我只想要一個我綁定的類。我希望現在的問題更清晰 – PieterDB
您是否使用正常的java代碼嘗試了這種方法,只需使用沒有OSGI和綁定複雜性的Main方法即可。 –