Есть ли более простой метод для обработки НЕСКОЛЬКИХ ссылок в OSGi?
Предположим, у меня есть такой класс:
@References(
value={
@Reference(name="dataSources",cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,policy=ReferencePolicy.DYNAMIC,strategy=ReferenceStrategy.EVENT,bind="bind",unbind="unbind",referenceInterface=DataSourceProvider.class)
})
public class DataSourceStoreServiceImpl implements DataSourceStoreService {
List<DataSourceProvider> dataSourceProviders = new CopyOnWriteArrayList<DataSourceProvider>();
public void bind(DataSourceProvider dataSourceProvider) {
dataSourceProviders.add(dataSourceProvider);
}
public void unbind(DataSourceProvider dataSourceProvider) {
dataSourceProviders.remove(dataSourceProvider);
}
}
Вот как я справляюсь со ссылками MULTIPLE
кардинальное.
У меня вопрос, возможно ли это сделать без шаблона? Я имею в виду что-то вроде этого:
public class DataSourceStoreServiceImpl implements DataSourceStoreService {
@CollectionType(CopyOnWriteArrayList.class)
@Reference(name="dataSources",cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,policy=ReferencePolicy.DYNAMIC,strategy=ReferenceStrategy.EVENT,bind="bind",unbind="unbind",referenceInterface=DataSourceProvider.class)
List<DataSourceProvider> dataSourceProviders
}
1 ответ
Решение
Использование аннотаций IPojo.
Просто объявите массив с аннотацией "require", как в этом примере:
@Requires
private Hello[] m_hello; // Service Dependency
Тогда вы можете позвонить в ваши службы так:
for(Hello helloService: m_hello){
helloService.ohHai("Test");
}
О, я забыл, вашему классу провайдера нужны 2 аннотации: @Component
а также @Provides
и ваши потребности класса потребителя @Component
а также @Instantiate