[英]Java: How to get SubClasses in Provider in Dependency Injection
给定3个类: FooA
, FooB
和FooC
,它们都是抽象类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.