gpt4 book ai didi

guice - 将参数传递给 Guice @Provides 方法

转载 作者:行者123 更新时间:2023-12-04 23:59:35 27 4
gpt4 key购买 nike

我有一个 Guice 模块,它有一个 @Provides 方法,它接受 2 个参数并返回接口(interface)的实现:

public class **ClientModule** extends **AbstractModule**{

@Override
protected void configure(){

}

@Singleton
@Provides
protected ClientInterfaces provideService(String param1, String param2){
returns something
}

}

在注入(inject)模块的主类中,如何将参数传递给@Provides 方法?
public MainClass{
main(){
Injector injector = Guice.createInjector( new ClientModule());
MainClass mainClass = injector.getInstance(MainClass.class);

}

这会引发空指针异常 param1

最佳答案

您自己不会调用提供方法,当您第一次需要访问(在这种情况下)您的 ClientInterfaces 实现时,Guice 会调用它。

我假设,您需要配置参数来初始化您的 ClientInterfaces。

所以试试Binding-Annotation,最简单的就是@Named:

configure() {
bindConstant().annotatedWith(Names.named("hostName")).to("myHost");
bindConstant().annotatedWith(Names.named("port")).to("8080");
}
@Provides
@Singleton
public MyService provideMyService(@Named("hostName") String host, @Named("port") String port) {
// init MyService
return ....
}

当然,您通常会从属性文件 System.props 中读取 myHost 和“8080”,而不是硬编码常量。

第一次需要注入(inject) MyService 时,Guice 会注意到它需要注解字符串以满足提供方法的要求并搜索绑定(bind)到注解名称的值...

关于guice - 将参数传递给 Guice @Provides 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com