gpt4 book ai didi

java - 提供者可以在不同的实例之间进行选择吗

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:03 25 4
gpt4 key购买 nike

我有一个设置,可以绑定(bind)一个类的多个实例。类之间的区别在于一个输入参数。这两个实例始终被注入(inject)。

绑定(bind)看起来像这样。

CmsExportAwsWriterSingle cmsExportAwsWriterSingleTranslation = new CmsExportAwsWriterSingle("testing-v1", getCredentials(id, secret));
bind(CmsExportWriter.class)
.annotatedWith(Names.named("config:export.writer.translation"))
.toInstance(cmsExportAwsWriterSingleTranslation);

CmsExportAwsWriterSingle cmsExportAwsWriterSingleReview = new CmsExportAwsWriterSingle("prod-v1", getCredentials(id, secret));
bind(CmsExportWriter.class)
.annotatedWith(Names.named("config:export.writer.review"))
.toInstance(cmsExportAwsWriterSingleReview);

现在我有两个服务,它们使用 javax.inject Provider 为我提供一个编写器的实例。

@Inject
public ServiceOne(Provider<CmsExportWriter> writer) {
CmsExportWriter writer = writer.get();
}

@Inject
public ServiceTwo(Provider<CmsExportWriter> writer) {
CmsExportWriter writer = writer.get();
}

有什么方法可以让提供者为我提供在设置中注入(inject)的类的正确实例吗?

例如,如果我希望 ServiceOne 获得名为 "config:export.writer.translation" 的 Writer和 ServiceTwo 获取 "config:export.writer.review"

或者我是否必须放弃提供程序并在服务的构造函数中使用@Named

public ServiceTwo(@Named("config:export.writer.review") CmsExportWriter writer)

仅使用 @Named 不会像 Provider 那样给我带来好处。我每次都需要它成为作者的新实例。

看起来正确的方法是注入(inject)提供程序。

最佳答案

提供程序用于在每次调用其 get 方法时创建一个新实例。这适用于以下情况:在创建封闭对象时不能/不应注入(inject)依赖项实例,或者需要多个实例等。这对于多个绑定(bind)的注入(inject)没有任何作用。

注入(inject)具有多个绑定(bind)的实例的正确方法是通过绑定(bind)注释。绑定(bind)注解有两种类型:内置@Named注解或自定义注解,需要按照标准模板实现。

您可以找到一些示例 here

关于java - 提供者可以在不同的实例之间进行选择吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905488/

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