Мне нужно создать сервисные компоненты с таким же интерфейсом. Это означает, что у меня разные реализации для одного и того же интерфейса. Я попытался создать два компонента с одинаковым интерфейсом либо только активным.
я использую декларативный равноденствие. У вас есть лучший дизайн для решения этой проблемы? пожалуйста, найдите мою конфигурацию ниже.
Компонент1.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="comp1">
<implementation class="com.demo.impl.CompOneImpl"/>
<service>
<provide interface="com.demo.IComponent"/>
</service>
</scr:component>
Component2.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="comp2">
<implementation class="com.demo.impl.CompTwoImpl"/>
<service>
<provide interface="com.demo.IComponent"/>
</service>
</scr:component>
Доступ к компоненту от потребителя
Использовать компонент
comp1.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="consumeComp1">
<implementation class="com.demo.service.ConsumeCompOne"/>
<reference bind="setComp" cardinality="1..1" interface="com.demo.IComponent" name="comp1" policy="static" unbind="unsetComp"/>
</scr:component>
comp2.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="consumeComp2">
<implementation class="com.demo.service.ConsumeCompTwo"/>
<reference bind="setComp" cardinality="1..1" interface="com.demo.IComponent" name="comp2" policy="static" unbind="unsetComp"/>
</scr:component>
когда я пытаюсь получить доступ к comp1 и comp2 соответственно через классы ConsumeCompOne и ConsumeCompTwo, я всегда получаю один и тот же компонент для обоих, comp1 или comp2. Пожалуйста, помогите мне решить эту проблему.
Заранее спасибо
гопи