CDI InjectionPoint无法使用网页

时间:2014-01-15 15:11:33

标签: java-ee cdi

学习CDI,我正在尝试一个例子。显然,当实际注入点在网页中时,注入点不会被注入。希望有意义!

有一个网页和两个类:

webpage.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
   <h:head>
       <title>Facelet Title</title>
   </h:head>
   <h:body style="background-color: #{userInfo.backgroundColor};">
       Hello from Facelets.
   /h:body>
</html>

UserInfo.java

@Named
public class UserInfo implements Serializable {

    private UserInterface **ui**;
    private static final Logger logger = Logger.getAnonymousLogger();

    @Inject
    public void setUserInterface(UserInterface ui, **InjectionPoint p**) {
        logger.log(Level.INFO, "In UserInfo {0}", p);
        this.ui = ui;
    }

    public String getBackgroundColor() {
        return ui.getBackgroundColor();
    }
}

UserInterfaceFactory.java:

  public class UserInterfaceFactory {

    private static final Logger logger = Logger.getAnonymousLogger();

    @Produces
    public UserInterface getUserInterface(@New AdultUserInterface ai, **InjectionPoint p**)     {
        logger.info("In UserInterfaceFactory " + p);
        return ai;
    }
  }

UserInfo.java 中的InjectionPoint变量未获得分配的值。那么输出就是:

In UserInfo null

UserInterfaceFactory 中的InjectionPoint变量获得指定的值。那么输出就是:

In UserInterfaceFactory [parameter 1] of [method] @Inject public com.imacious.learncdi.client.UserInfo.setUserInterface(UserInterface, InjectionPoint)

我的问题是,为什么注射点'在一种情况下“起作用”而在另一种情况下不起作用。更好的是,为什么当注入是一个网页(jsf或jsp)时它似乎不起作用?

1 个答案:

答案 0 :(得分:0)

这是按设计工作的。

没有注入,因为你从EL引用你的bean,所以没有InjectionPoint。参见1.0规范下面的案例2。

容器必须确保在此过程中实例化的任何依赖对象的InjectionPoint类型和限定符@Default的每个注入点都会收到:

  • 表示注入依赖对象的注入点的InjectionPoint实例,或

  • 如果没有注入任何注入点,则为空值。