java – CDI制作人和注入
作者:互联网
我想在我的应用程序中使用一个生产者,但我陷入了困境,我正在尝试注入bean.我得到了着名的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;
这个命名是否必要?
解决方法:
>您的EmailMessageSender类实现了MessageSender,因此它是一个可用于注入的bean,其类型为EmailMessageSender或MessageSender.
>您的生产者返回MessageSender类型的bean.
>您的注入点需要整个应用程序中唯一的bean,其类型和限定符与注入点的类型和限定符完全匹配.
从一个和两个你有2个匹配单个注入点的bean – 因此这是一个模糊的依赖.
最重要的是,您的生产者在上面的示例中绝对没有意义(除了导致错误)因为它只返回一个新的EmailMessageSender实例,这与@Inject MessageSender的效果完全相同,因为EmailMessageSender具有默认范围@Dependent.
标签:java,cdi,weld 来源: https://codeday.me/bug/20190520/1141575.html