1

次のようなクラスがあるとします。

@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

}
4

1 に答える 1

0

IPojo アノテーションの使用。

次の例のように、アノテーション「requires」を使用して配列を宣言するだけです。

@Requires
private Hello[] m_hello; // Service Dependency

次に、次のようにサービスを呼び出すことができます。

for(Hello helloService: m_hello){
       helloService.ohHai("Test");
}

忘れていましたが、プロバイダー クラスには 2 つの注釈が必要です 。消費者クラスにはと@Componentが必要です。@Provides@Component@Instantiate

于 2014-04-23T15:20:00.483 に答える