当前位置: 首页 > 知识库问答 >
问题:

CDI发生器和注入

曾明诚
2023-03-14

我想使用一个生产者在我的应用程序,但我卡在点,我试图注入豆。我得到了著名的WELD-001409错误。请减轻我对cdi生产者的理解。

这是我的界面:

@Named
    public interface MessageSender {
      void sendMessage();
    }

豆子:

public class EmailMessageSender implements MessageSender {

  @Override
  public void sendMessage() {
    System.out.println("Sending email message");
  }

}

而制作人:

@SessionScoped
public class MessageSenderFactory implements Serializable {

    private static final long serialVersionUID = 5269302440619391616L;

    @Produces
    public MessageSender getMessageSender() {
        return new EmailMessageSender();
    }

}

现在我正在注射豆子:

@Inject 
MessageSender messageSender;

当我试图部署项目时,我得到了WELD-001409错误,eclipse也说有多个注入点。

它与显式命名一起工作:

@Inject @Named("messageSender")
MessageSender messageSender;

这个命名有必要吗?

共有1个答案

谷梁存
2023-03-14

>

  • 您的Email MessageSender类实现了MessageSender,因此它是一个可用于注入类型为Email MessageSenderMessageSender的bean。

    生产者返回类型为MessageSender的bean。

    您的注入点需要整个应用程序中唯一一个类型和限定符与注入点的类型和限定符完全匹配的bean。

    从1到2,您有两个bean匹配一个注入点-因此这是一个不明确的依赖关系。

    总之,在上面的示例中,您的制作人是毫无意义的(除了导致错误之外),因为它只返回一个新的EmailMessageSender实例,这与简单地@Inject MessageSender的效果相同,因为EmailMessageSender具有默认的作用域@Dependent

  •  类似资料:
    • 有人能解释一下CDI范围注释在生产者中的作用吗?他们似乎什么也做不了。 这些,自然地,在启动时给出了这个(省略的)错误。 WELD-001409:类型的依赖关系不明确。可能的依赖关系: 带有限定符[@Any@Default]的生产者方法[Thing]声明为[[BackedAnnotatedMethod]@生成公共pkg。测验东西制作人。thingMaker(), 因此,尽管“RequestScop

    • 问题内容: 当前,我正在使用PersistenceContext注入EntityManager。EM被完美注入。 现在,我尝试装饰Bean,然后突然没有注入em。我得到一个NullPointerException。 我知道EJB和CDI是2个完全不同的管理器,所以一个都不知道另一个。我期望@PersistenceContext是EJB注入点,而@Inject是CDI。我应该怎么做才能解决这个问题并

    • 我有一个JAR文件,其中包含一个请求范围Bean。(一个注释为的类)。 我有另一个Web服务项目(作为WAR文件构建)。上述JAR文件位于WAR文件的文件夹中。 我试图的类到Web服务项目中的一个类中。 我正在得到一个 这两个项目都有JAR文件,WAR文件包含一个空的。我已经研究这个问题好几天了。请帮忙。 谢谢

    • 当前有包含内部映射器的映射器(有时,它们本身包含其他内部映射器)。

    • 假设有一个SessionFactory的生产者(举个例子): 不,我可以这样使用我的数据库对象: 到目前为止,一切都很好。因此,让我们假设这些东西是在一个框架中实现的,并且将被几个应用程序使用。 现在,一个应用程序决定使用另一个SessionFactory,因此它实现了自己的生产者和一个限定符:

    • 问题内容: 由于JPA 2.0不支持注入EntityListener(将使用JPA 2.1),因此决定使用JNDI查找来获取,并通过它来获取登录用户。我定义了一个与此类似的东西: 在会话范围内以以下方式管理用户: 我想知道这种方法有什么缺点或要注意的地方。性能吞吐量?当有多个登录用户在其自己的范围内同时更新实体时,会发生什么情况? Hibernate JPA 2.0 缝焊CDI Glassfish