Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi中是否有一种更简单的方法来处理多个引用?_Java_Osgi_Apache Felix_Whiteboard - Fatal编程技术网

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和卡拉夫他们合作得很好。依我拙见