私は OSGi と連絡を取り合っていますが、今は少し混乱しています。宣言型サービスと低レベル API の混合を意味するハイブリッド サービス モデルを使用しています。
OSGi-INF/component.xml の下に配置された次のパーツ宣言を検討してください。
<property name="canHandle" type="String" value="Some kind of stuff"/>
<service>
<provide interface="foo"/>
</service>
そしてもう一つ
<property name="canHandle" type="String" value="Some other Stuff"/>
<service>
<provide interface="foo"/>
</service>
別のバンドルには、次のようなものがあります。
bar.createSomething(String type){
ServiceReference[] services FrameworkUtil.getBundle(getClass()).getBundleContext()
.getAllServiceReferences("foo");
for (ServiceReference s : services) {
if (type.equals(s.getProperty("canHandle")){
Foo foo = (Foo)FrameworkUtilgetBundle(getClass()).getBundleContext().getService(s);
foo.execute();
簡単に言うと、複数の実装を持つサービス インターフェイスがあり、実行時にプロパティに対して文字列を照合するものを使用しています。では、宣言型サービスのみを使用して、この状況にどのように対処できますか?
Virgo を使用しているので、Spring で可能であれば、これもオプションになります。