【发布时间】:2013-09-17 20:45:51
【问题描述】:
我想在我的应用程序中使用生产者,但我被困在我试图注入 bean 的地方。我得到了著名的 WELD-001409 错误。请加深我对cdi producer的理解。
这是我的界面:
@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();
}
}
现在我正在注入 bean:
@Inject
MessageSender messageSender;
当我尝试部署项目时,我收到 WELD-001409 错误,并且 Eclipse 还说有多个注入点。
它适用于显式命名:
@Inject @Named("messageSender")
MessageSender messageSender;
这个命名有必要吗?
【问题讨论】:
-
附带说明 - 指定 Java 异常类而不是特定于实现的
WELD-001409,因为: 1. 有些人可能知道 CDI,但不一定知道 WELD,也许是 OWB; 2. 即使是大多数使用 WELD 的人也可能会记住 Java 异常类的完整和描述性名称,但不会记得神秘无意义的WELD-001409。