gpt4 book ai didi

java - DI 容器与工厂

转载 作者:搜寻专家 更新时间:2023-11-01 02:06:37 24 4
gpt4 key购买 nike

我知道有很多关于依赖注入(inject)的文章和话题,但没有那么多关于依赖注入(inject)容器的文章。我找到了 this one by Fabien Potencier非常有帮助,尽管它针对的是 PHP。然而,随着我对这些容器的了解越多,我得出的结论是,这不过是工厂方法的简单集合,这是真的吗?

更深入更具体的观点:向对象注入(inject)依赖时

foo.Bar = new Dependency();

我也可以写

foo.Bar = new myFactory.CreateDependency();

或用容器

foo.Bar = myContainer.CreateDependency();

这里最后一个方法中的容器不仅有一个方法,还有许多其他方法来创建其他类型,所以它只是工厂方法的容器,对吧?

最佳答案

DI 容器的全部意义在于你永远不需要/不应该编写像

这样的代码
foo.Bar = myContainer.CreateDependency();

它被认为是一种反模式。 DI 容器在 Composition Root 中应该只使用一次(这是一个主要的 DI 容器使用模式)。

DI 容器根据配置自动构造对象并通过构造函数或属性注入(inject)依赖项。在工厂的情况下,你必须自己做所有事情。除了创建 DI 容器之外,还为您提供:

生命周期管理。所以每次需要依赖时,容器可能会注入(inject)相同的对象(单例生命周期),或者每次都返回新的对象。

有限的 AOP 功能,例如方法调用拦截和在方法前后执行自定义逻辑。

你可以看看这本书Dependency Injection in .NET .它对我理解 DI 容器、使用模式和一般的依赖注入(inject)有很大帮助。

关于java - DI 容器与工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304214/

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