@Produces返回FacesContext ---为什么?

时间:2012-04-08 21:18:57

标签: jsf glassfish facelets cdi jboss-weld

我对同一主题提出另一个问题犹豫不决,但至少现在我正在阅读,我认为,正确docs

所以,这堂课:

class FacesContextProducer {
   @Produces @RequestScoped FacesContext getFacesContext() {
      return FacesContext.getCurrentInstance();
   }
}

事实上,weld docs这种方法适用于Glassfish:GlassFish is using WELD as the reference implementation for JSR-299: Java Contexts and Dependency Injection for the Java EE platform (CDI).

对于上述课程,它会在哪里使用?你为什么需要一个单独的类@Produces a FacesContext?

2 个答案:

答案 0 :(得分:7)

  

对于上述课程,它会在哪里使用?他为什么要尝试注入FacesContext?

我认为这是为了

  1. 一致性;或
  2. 测试。
  3. ad 1.如果有人试图做纯CDI,那么当你没有使用其他依赖查找机制(如getCurrentInstace()静态方法)时,它看起来很不错。请注意,定义生产者并使用注入确实不是 need 。它与CDI的使用方便且一致。

    ad 2.由博客McDowell链接解释,想象一下注入是用CDI完成的。

      

    为什么你需要一个单独的类@Produces a FacesContext?

    这不需要是一个单独的类,您可以让单个类生成多个bean。它只是帮助清晰的代码将它分开。

答案 1 :(得分:6)

您可能需要注入FacesContext以避免直接依赖静态getCurrentInstance()方法来简化模拟和单元测试。

我已经为JSF自己的依赖注入机制here写了一些内容。