Jakarta ee CDI InjectionPoint不使用网页

Jakarta ee CDI InjectionPoint不使用网页,jakarta-ee,cdi,Jakarta 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"> <

学习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>
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
In UserInterfaceFactory [parameter 1] of [method] @Inject public com.imacious.learncdi.client.UserInfo.setUserInterface(UserInterface, InjectionPoint)
UserInterfaceFactory中的InjectionPoint变量获得分配的值。因此,这里的输出是:

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

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

这是按设计工作的

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

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

  • InjectionPoint实例,表示从属对象将被注入的注入点,或

  • 如果未注入任何注入点,则为空值


将bean注入网页时,使用InjectionPoint有什么意义?哦!应该提到。我只是在试验——我正在阅读《焊接用户指南》,关于注入点的细节不够详细;恐怕规格也不够。