gpt4 book ai didi

java - 静态工厂和依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-03 02:44:17 25 4
gpt4 key购买 nike

在《Effective Java》(书籍)中,推荐使用静态工厂。

另一方面,建议保持明确的依赖关系,例如使用 DI。

但是当我想使用静态工厂时,这种显式性将被跳过,因为对象实例将通过调用静态工厂方法来接收。使用静态工厂方法,我不必传入包含静态工厂的对象。

这两件事如何结合在一起?

最佳答案

真是个好问题。
静态工厂确实有这个缺点(除其他外):它们不明确,因此不能用作可切换的依赖项。

我认为你不能让这两件事一起工作,因为静态方法与类关联,而依赖注入(inject)与实例关联。
所以这是一种设计选择。

就我个人而言,我使用工厂方法,因为我不想允许显式设置工厂返回的依赖项。
情况就是这样,因为您想要掌握对象创建:一致性、缓存等等......并且您想要提供一个清晰的 API。这是保证这一点的非常直接的方法。
通过依赖注入(inject)设置对象不会提供这一点。

通常,我为那些我既不想提供替代实现也不想在单元测试期间模拟的类执行此操作。
这是我想掌握创建的业务/模型类以及一些“实用”类的情况。
但是,一旦需要显式设置依赖关系,我就会将静态工厂重构为允许显式设置依赖关系的东西。
如果始终需要对象创建的主人,我会将静态工厂转换为我注入(inject)的实例工厂。
否则,我直接注入(inject)工厂返回的对象。

关于java - 静态工厂和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48450951/

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