我正试图围绕依赖注入。
我感到困惑的一件事是您的所有对象实例化是否都需要由 DI 框架(Spring、Guice 等)控制。
或者,如果不是,您如何确定哪些对象由框架实例化,哪些对象由new
操作符实例化?
我正试图围绕依赖注入。
我感到困惑的一件事是您的所有对象实例化是否都需要由 DI 框架(Spring、Guice 等)控制。
或者,如果不是,您如何确定哪些对象由框架实例化,哪些对象由new
操作符实例化?
不,还有新的地方。并非所有对象都需要在 DI 工厂的控制之下。
您可以轻松发现需要在 DI 工厂控制下的类,因为它们通常涉及接口和实现。
实现中的任何本地对象都有权调用 new。为满足特定用例而实例化的模型对象应通过调用 new 并传递该特定实例的参数值来实例化。
我发现Miško Hevery 的这篇文章非常有助于区分哪些对象应该作为依赖项注入,哪些对象可以创建。他区分了“Newable”和“Injectable”类。
我想说不应该注入没有“真正”依赖关系的更简单的对象。这些可以是数据对象,当然也可以是异常等。
“消除新操作员”的事情基本上只是提供了一个很好的指南,可以在哪里寻找可 DI 的东西。
只要更新不会阻止您隔离行为单元进行测试,就可以了。示例可能是创建在实现中使用的集合或值类型,但实际上并没有真正做“对象工作”本身。
专注于“依赖”这个词——所讨论的对象是否以某种方式依赖于包含对象来实现其存在的一个真正目的?如果是这样,它应该从外部注入。
new
不一定排除 DI 框架。例如,在 Spring 中,您可以使用类加载魔法对任何由new
.
因此,虽然new
Java 中的容器驱动 DI通常是互斥的,但这并不是一个硬性规定。