gpt4 book ai didi

java - 我可以使用带有构造函数和本地实例的 Guice 抽象模块来提供动态绑定(bind)吗?

转载 作者:行者123 更新时间:2023-11-30 10:59:34 25 4
gpt4 key购买 nike

我可以使用带有构造函数和本地实例的 Guice 抽象模块来提供动态绑定(bind)吗? Guice 模块可以有构造函数吗?

我知道使用 providers/factory builder 是更好的方法,但就我而言,我最终会创建具有具体逻辑(将近一百个)的 n-providers 或 factory builder 来做同样的事情。

public class MyDynamicModule extends AbstractModule{
private NeededInterface imp;

public MyDynamicModule(NeededInterface neededImplimentation){
this.imp = neededImplimentation;
}

@Override
protected void configure() {
bind(NeededInterface.class)
.annotatedWith(Names.named("keyname"))
.toInstance(neededImplimentation);
/*.
.
.
.
*1000s of other binding configuration which are not related to the discussion**/
}
}

我知道替代方案,但我需要知道这段代码是否有误?如果是,我需要进行重大改造以仅替换这一行代码,这反过来又会成为我的应用程序的巨大开销。

我需要找到一种方法来动态地将绑定(bind)配置添加到现有模块。从性能的角度来看,上述逻辑似乎简单明了。

最佳答案

这样做很好。您将无法将任何依赖项注入(inject) NeededImplementation ,但只要您不需要注入(inject)任何东西就可以了。我想您在启动时有某种条件逻辑,可以根据...选择不同的实现?命令行参数?属性文件?您已经有了执行此决策过程的代码;您应该能够将该代码放入 Provider<NeededInterface>没有太大的困难,但你没有提供细节。您是否建议为您的构造函数设置数百个参数?

如果你只有一个实现类,那么你可以这样做:

bind(NeededInterface.class)
.annotatedWith(Names.named("keyname"))
.to(NeededImplimentation.class)
.in(Singleton.class);

如果该类具有无参数构造函数,您会得到相同的结果。您不想让 Guice 为您创建对象的原因是什么?

关于java - 我可以使用带有构造函数和本地实例的 Guice 抽象模块来提供动态绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31868902/

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