Eva*_*les 0 dependency-injection java-ee ejb-3.0
我有一组由多个提供商提供的数据.由于它们各自都有自己的访问方式,因此它们都有单独的EJB,尽管它们都实现了相同的接口.
有没有办法让所有人都注射?所以我最终得到某种List<MyInterface>?标准注射似乎给出了一个或模糊的错误.
通过CDI集成,您可以根据组织项目的方式选择两种方法.
如果提供者是在同一个模块中定义的,即注入与ejbs的定义在同一个战争中,或者在与注入点声明相同的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果你有远程定义这些ejbs,那么你需要解决使用@Producer,从那里你可以使用上面的Instance注入,因为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.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |