pal*_*lto 12 java cdi java-ee-6
我们假设我有一个Car类.在我的代码中,我想创建10辆汽车.Car类有一些@Inject注释依赖项.这样做的最佳方法是什么?
CDI有一个Provider接口,我可以使用它来创建汽车:
@Inject Provider<Car> carProvider;
public void businessMethod(){
Car car = carProvider.get();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果我没有CarFactory,它有一个带有@Produces注释的方法来创建汽车,那就不行了.尽管它反映了现实世界我无法在没有工厂的情况下制造汽车,但我宁愿不为所有东西编写工厂.我只是希望CDI容器像任何其他bean一样创建我的汽车.你怎么建议我创造那些汽车?
tem*_*eva 10
只需使用javax.enterprise.inject.Instance接口即可.
像这样:
public class Bean {
private Instance<Car> carInstances;
@Inject
Bean(@Any Instance<Car> carInstances){
this.carInstances = carInstances;
}
public void use(){
Car newCar = carInstances.get();
// Do stuff with car ...
}
}
Run Code Online (Sandbox Code Playgroud)
我最喜欢的编程查找模型是使用CDI.current().select().get().
在这里展示.
servlet依赖于两个CDI bean,一个请求作用域,另一个作用域作用域:
private final RequestScopedBean requestScoped
= CDI.current().select(RequestScopedBean.class).get();
private final ApplicationScopedBean applicationScoped
= CDI.current().select(ApplicationScopedBean.class).get();
Run Code Online (Sandbox Code Playgroud)
可以在此处找到使用此servlet的测试类.
检查代码,您会发现代码完全等同于您将使用的代码@Inject MyBean myBean;.
| 归档时间: |
|
| 查看次数: |
13138 次 |
| 最近记录: |