繁体   English   中英

Java:如何在依赖注入中在提供程序中获取子类

[英]Java: How to get SubClasses in Provider in Dependency Injection

给定3个类: FooAFooBFooC ,它们都是抽象类Foo子类。 但是,所有人都在Dependency Injection中使用相同的构造函数,因此我在使用javax.inject.Provider获取完全注入的子类实例。

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

我如何总结这些提供者,使其成为Provider<Foo> fooProvider ,同时仍然能够获取其子类的实例,或者还有另一种方法可以摆脱多个Provider?

您可以结合使用生产者和限定词来区分已解决的实例:

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
@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
@Named("fooA")
Provider<Foo> fooAProvider

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM