gpt4 book ai didi

Java:如何在依赖注入(inject)中获取Provider中的子类

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

给定 3 个类:FooA , FooBFooC ,它们都是抽象类 Foo 的子类。但是,所有这些都使用相同的构造函数和依赖注入(inject),所以我使用 javax.inject.Provider获取子类的完全注入(inject)实例。

Provider<FooA> fooAProvider
Provider<FooB> fooBProvider
Provider<FooC> fooCProvider

我怎样才能将提供者总结为 Provider<Foo> fooProvider ,同时仍然能够获取其子类的实例,或者是否有其他方法来摆脱多个提供程序?

最佳答案

您可以组合生产者和限定符来区分已解析的实例:

public class ProviderSuppliers {
@Producer
@Named("fooA")
public static Provider<Foo> getFooA() {
return //create Provider for FooA
}
@Producer
@Named("fooB")
public static Provider<Foo> getFooB() {
return //create Provider for FooB
}
@Producer
@Named("fooC")
public static Provider<Foo> getFooC() {
return //create Provider for FooC
}
}

然后您可以使用限定符注入(inject)它们:

@Inject
@Named("fooA")
Provider<FooA> fooAProvider

@Inject
@Named("fooB")
Provider<FooB> fooBProvider

//and so on

现在,在 Provider<Foo> :这有点问题,因为从技术上讲你无法做到这一点:

Provider<Foo> fooA = new Provider<FooA>(); //you can't assign like this.

但是,您仍然可以按如下方式进行声明,并仍然通过注入(inject)预期实例来使其工作(限定符负责处理)

@Inject
@Named("fooA")
Provider<Foo> fooAProvider

这实际上很糟糕,因为您只是在绕过类型安全。更好的方法是在生产者和注入(inject)点声明相同的类型,这也有助于类型安全,其中 Provider<FooX>实际使用的对象。

关于Java:如何在依赖注入(inject)中获取Provider中的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50249351/

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