gpt4 book ai didi

java - 注入(inject)具有多个实现的接口(interface)的目的

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

考虑一个像下面这样的工厂:

public interface SomeFactory {
public SomeValue createSomething(SomeKey key);
}

此外,我们还得到了 SomeFactory 的一些实现:

public class SomeFactoryImpl implements SomeFactory {

@Override
public SomeValue createSomething(Key key) {
// some logic
}

}

让我们考虑一个想要使用这个工厂的类:

public class SomeClass{

@Inject
private SomeFactory someFactory;

public String someMethod(Key someKey) {
someFactory.createSomething(someKey);
// some more logic
}
}

在这种情况下使用工厂接口(interface)有什么好处?我的想法如下:

假设我想为我的工厂使用另一个实现:

public class AnotherFactoryImpl implements SomeFactory {

@Override
public SomeValue createSomething(Key key) {
// some logic
}

}

哪个工厂将与 @Inject-annotation 一起使用?注入(inject)实现本身是否更合适,或者我们总是只有一个工厂实现?另一个可能的答案:为工厂使用接口(interface)是否不合适?

最佳答案

使用接口(interface)的想法是,你不关心你手中有哪个实现,而只使用接口(interface)的方法,这些方法在所有实现中都是通用的。不要忘记,您必须使用相同的方法签名,包括覆盖时相同的返回值。

注入(inject)机制按名称工作 - 因此,由于您没有在 @Inject 中指定值,它会查找名为 someFactory 的对象并注入(inject)它,这很好,因为它是 SomeFactory 类型,无论后面是哪个实现。您也可以注入(inject)一个特定的实现,这取决于您的用例,如果您处理的是常见行为还是特定行为。您想要注入(inject)的实例必须绑定(bind)到您正在使用的范围,或者必须有一个在需要注入(inject)时创建对象的 Producer

<小时/>

编辑:请参阅下面我的评论,了解 CDI 使用情况的链接以及该用例的更简单的架构。

关于java - 注入(inject)具有多个实现的接口(interface)的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25888892/

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