gpt4 book ai didi

java - 带参数的 DRY 自定义 Guice 提供程序

转载 作者:行者123 更新时间:2023-12-01 08:54:48 24 4
gpt4 key购买 nike

我需要在不同位置注入(inject)多个 X 实例。我实现了一个自定义 Guice Provider 来提供类 X 的不同实例,如下所示。

public class XProvider implements Provider<X> {
private final Factory f;
private final String NAME = "Something String";

@Inject
public XProvider(Factory f) {
this.f = f;
}

public X get() {
return new X(f, NAME);
}
}

因为我需要具有不同NAME值的X的不同实例,所以我需要有多个相似的类如 XProvider1、XProvider2 等,仅在一个字段上有所不同。创建一个抽象类来扩展并不能帮助减少冗余代码量,因为(1)隐藏字段不好(2) 如果我不隐藏字段,我仍然需要在子类中拥有构造函数。

我无法使用辅助注入(inject),因为我不拥有 X,因此我更改了它的构造函数。

必须有更好的方法来做到这一点,要么是使用 Guice 的更智能的方法,要么是另一种重组我的代码的方法。我在这里寻求一些改变的建议。

谢谢

最佳答案

如果您预定义了一组有限的可能参数,则可以在 guice 模块中使用命名的 @Provides 绑定(bind):

@Provides @Named("Type 1") MyClass getType1() {return new MyClass("Param of type 1");}
@Provides @Named("Type 2") MyClass getType2() {return new MyClass("Param of type 2");}

然后用名称注入(inject)它

@Inject @Named("Type 1") 
private MyClass instance, anotherInstance;

ps。您可以将任何可注入(inject)的参数传递给 @Provides 方法,即 getType2(Factory factory) {return ...

关于java - 带参数的 DRY 自定义 Guice 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42106774/

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