问题描述
DS方式生成component的使用一直有一个问题不求甚解,我写了一个简单的例子来说明。写了一个IHello.java接口publicinterfaceIHello{publicvoidsayHello();}
写了一个Speaker.java类包含IHello接口对象publicclassSpeaker{privateIHelloiHello=null;publicIHellogetiHello(){returniHello;}publicvoidsetiHello(IHelloiHello){System.err.println("iHello----------"+iHello);System.err.println("speaker=="+this);this.iHello=iHello;}voidAAA(){System.err.println("AAA");//this.getiHello().sayHello();}voidBBB(){System.err.println("BBB");}}
其ds实现的component.xml为<?xmlversion="1.0"encoding="UTF-8"?><scr:componentxmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"activate="AAA"deactivate="BBB"name="Speaker"><implementationclass="com.kedong.test.Speaker"/><referencebind="setiHello"cardinality="1..1"interface="com.kedong.test.IHello"name="helloService"policy="static"/></scr:component>
实现接口的类JapaneseHello.java为publicclassJapaneseHelloimplementsIHello{@OverridepublicvoidsayHello(){//TODOAuto-generatedmethodstubSystem.err.println("connichiwa------------!!!");}}
该类提供服务的component.xml为<scr:componentxmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"name="JapaneseHello"><implementationclass="Japanesehello.JapaneseHello"/><service><provideinterface="com.kedong.test.IHello"/></service></scr:component>
问题是我知道此时通过Speaker的set方法可以实例化得到IHello的对象JapaneseHello但是如何得到此时的Speaker对象呢,如果Speaker类里面的IHello对象不是静态的话,我每次new出的Speaker对象都是空的?难道只能再将Speaker也作为一个服务通过component.xml提供出来作为服务使用??其实很多情况只是想每个new出来Speaker对象中包含一个JapaneseHello对象而已,如何实现?