在 OSGi 应用程序中,我有一个类层次结构,如下所示:
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
使用了两次打印。这是什么原因?我怎样才能让它打印正确的实现类?