Java OSGi中是否有一种更简单的方法来处理多个引用?
假设我有一个这样的类:Java OSGi中是否有一种更简单的方法来处理多个引用?,java,osgi,apache-felix,whiteboard,Java,Osgi,Apache Felix,Whiteboard,假设我有一个这样的类: @References( value={ @Reference(name="dataSources",cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,policy=ReferencePolicy.DYNAMIC,strategy=ReferenceStrategy.EVENT,bind="bind",unbind="unbind",referenceInterface=D
@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);
}
}
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
}
使用
只需声明带有注释“requires”的数组,如本例所示:
@Requires
private Hello[] m_hello; // Service Dependency
然后,您可以这样呼叫您的服务:
for(Hello helloService: m_hello){
helloService.ohHai("Test");
}
哦,我忘了,您的提供者类需要2个注释:@组件
和@提供
您的消费者类需要
@组件
和@实例化
如果您正在使用felix,您是否尝试过iPOJO,因为它旨在使这些问题更容易处理。还没有,但我会研究它。谢谢您应该会发现iPOJO的使用更简单。(或者至少这是它的目的)我已经在很多项目中使用过它,但从未尝试单独使用Felix。我实际上使用的是Karaf(它使用Felix)。它对卡拉夫有用吗?实际上,我只使用过iPOJO和卡拉夫他们合作得很好。依我拙见