Google Guice 非目标绑定

问题描述 投票:0回答:1

我的问题更多的是要求一个简单的无目标(参考 google guice wiki 的拼写)绑定的工作示例。到目前为止,我已经浏览了整个互联网,但未能找到一个例子。 Google guice wiki 没有深入解释非目标绑定如何工作,我陷入了学习过程。我知道您必须在模块中绑定一个具体类,但从那里我不明白哪个类能够拾取它或者它将如何拾取它作为实际注入。请帮忙,谢谢。

java dependency-injection guice
1个回答
0
投票

基于 Guice 文档

@您可以在不指定目标的情况下创建绑定。这对于由 @ImplementedBy 或 @ProvidedBy 注释的具体类和类型最有用。

@ImplementedBy(MessageFormatterValidationPrinter.class)
public interface ValidationPrinter {
    public void print();
}

然后创建一个impl类:

public class MessageFormatterValidationPrinter implements ValidationPrinter {

private MessageFormatter formatter;
private String templateId;
private String messageData;

@Inject
public MessageFormatterValidationPrinter(MessageFormatter messageFormatter, @Named("templateId") String templateId,
        @Named("messageData") String messageData) {
    this.formatter = messageFormatter;
    this.templateId = templateId;
    this.messageData = messageData;
}

@Override
public void print() {        
    System.out.println(formatter
        .formatMessage(templateId,messageData));}
}

在模块中:

public class NotificationModule extends AbstractModule {

@Override
public void configure() {
    bind(ValidationPrinter.class);
}

}

完成所有这些工作后,就可以创建 Injector 来注入了:

Injector injectorFromProvide = Guice.createInjector(new NotificationModule());
ValidationPrinter printer = injectorFromProvide.getInstance(ValidationPrinter.class);
printer.print();
© www.soinside.com 2019 - 2024. All rights reserved.