0
所有EJB我有一組由多個供應商提供的數據。由於它們各自有各自的訪問方式,它們都有獨立的EJB,儘管它們都實現了相同的接口。找到實現接口
有沒有辦法讓所有他們注入?所以我最終得到某種List<MyInterface>
?標準注射似乎給出了任何一個,或者模棱兩可的錯誤。
所有EJB我有一組由多個供應商提供的數據。由於它們各自有各自的訪問方式,它們都有獨立的EJB,儘管它們都實現了相同的接口。找到實現接口
有沒有辦法讓所有他們注入?所以我最終得到某種List<MyInterface>
?標準注射似乎給出了任何一個,或者模棱兩可的錯誤。
隨着CDI的整合,根據您組織項目的方式,您有兩種選擇。
如果提供者相同的模塊中定義的,即,噴射相同戰爭EJB的定義範圍內,或在相同的EJB JAR如在注射點的聲明,則:
public class MyService {
@Inject
@Any
private Instance<MyProvider> providers;
public void notifyProviders() {
//Because there may be multiple implementation, do not use providers.get(), it is ambigous.
//The Instance object implements Iterable, so you can iterate over it using the for loop.
for(final MyProvider provider : providers) {
provider.notify();
}
}
}
但是,如果您有這些ejb的遠程定義,那麼您需要解決使用@Producer,因爲您可以使用上述實例注入,因爲CDI無法注入遠程ejb bean。因此:
@Stateless
public class MyProviderContext {
@EJB
private MyProvider1 provider1;
@EJB
private MyProvider2 provider2;
//... More declarations.
@Produces
public MyProvider provider1() {return provider1;}
@Produces
public MyProvider provider2() {return provider2;}
//... More producers.
}