【问题标题】:Inject a Java object in a JSF Named bean在 JSF 命名 bean 中注入 Java 对象
【发布时间】:2013-01-01 16:11:51
【问题描述】:

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

@Named
@SessionScoped
public class PosController implements Serializable {

  @EJB FatturaFacade fatturaFacade;

  // ...
}

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

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

看到@interface注解,没看懂。

【问题讨论】:

    标签: jsf jakarta-ee dependency-injection java-ee-6 cdi


    【解决方案1】:

    假设您拥有完整的 Java EE 6 平台,最好的方法是使用 CDI 的@Inject

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

    public class Bean {
      @Inject
      private WebServiceRetriever webServiceRetriever;
    
      @Inject
      private FilesRetriever filesRetriever;
    
      //etc.
    

    对于同一接口的多个实现,您可以创建@Qualifier 注释。 Using Qualifiers section of the Java EE 6 tutorial 中解释了它们的用法。

    @Files 限定符:

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

    FileRetriever 实现:

    @Files
    public class FileRetriever implements Retriever {}
    

    注入目标中Retriever实现的消歧:

    public class Bean {
      @Inject @WebServices
      private Retriever webServiceRetriever;
    
      @Inject @Files
      private Retriever filesRetriever;
    
      //etc.
    

    在我的博客using JSF with CDI 上有一篇文章,您可能会觉得有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2014-08-11
      相关资源
      最近更新 更多