я связываюсь с 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, поэтому, если это возможно с помощью весны, это тоже будет вариант.