Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
在名为bean的JSF中注入Java对象_Jsf_Jakarta Ee_Dependency Injection_Java Ee 6_Cdi - Fatal编程技术网

在名为bean的JSF中注入Java对象

在名为bean的JSF中注入Java对象,jsf,jakarta-ee,dependency-injection,java-ee-6,cdi,Jsf,Jakarta Ee,Dependency Injection,Java Ee 6,Cdi,我有一个JSF2bean用作视图的控制器: @Named @SessionScoped public class PosController implements Serializable { @EJB FatturaFacade fatturaFacade; // ... } 正如您所看到的,我已经可以在其中注入一个EJB(用作dao包装器),但是注入“简单”对象的方法是什么?如果我有如下不同的实现呢 interface Retriever; class WebServiceRe

我有一个JSF2bean用作视图的控制器:

@Named
@SessionScoped
public class PosController implements Serializable {

  @EJB FatturaFacade fatturaFacade;

  // ...
}
正如您所看到的,我已经可以在其中注入一个EJB(用作dao包装器),但是注入“简单”对象的方法是什么?如果我有如下不同的实现呢

interface Retriever;
class WebServiceRetriever implements Retriever;
class FileRetriever implements Retriever;

我看到了
@接口
注释,但我没有很好地理解它。

假设您有一个完整的JavaEE6平台,最好的方法是使用CDI的
@Inject

最简单的机制是使用具体类型:

public class Bean {
  @Inject
  private WebServiceRetriever webServiceRetriever;

  @Inject
  private FilesRetriever filesRetriever;

  //etc.
对于同一接口的多个实现,可以创建注释。有关其用法的说明,请参见

@Files
限定符:

@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface Files {}
FileRetriever
实现:

@Files
public class FileRetriever implements Retriever {}
消除注入目标中
检索器
实现的歧义:

public class Bean {
  @Inject @WebServices
  private Retriever webServiceRetriever;

  @Inject @Files
  private Retriever filesRetriever;

  //etc.
我的博客上有一篇文章,你可能会觉得有用