我创建了一个使用Java Executor API来创建/管理具有固定线程数的池的类。 每个线程都需要一个特定对象的新实例,我想用Guice注入这个对象。 目前我正在使用Provider,它通过get()方法提供对象的新实例。
但是现在这个类依赖于Provider,这是Guice特有的,有效地将代码耦合到Guice框架。 我真的希望这堂课真正与Guice无关,这可能吗?
只是创建使用'new'关键字的新实例不是一个选项,因为这使得无法在单元测试中通过模拟实现替换这些对象。
依赖注入可能不适合这个,我最好创建一个工厂来获取这些对象?
答案 0 :(得分:3)
您可能想要考虑的一件事是从主干构建Guice并使用它直到Guice 3.0发布。然后,您可以使用JSR-330的javax.inject.Provider代替Guice's。
编辑:除此之外,我一般认为耦合到DI容器(通过从com.google.inject
导入内容,在这种情况下)不是问题。人们有时会成功。只要您不依赖于如何获得依赖关系的详细信息(例如,在所有地方注入Injector
),就可以很容易地改变您注入的所有地点Provider
相反,你自己的界面与类似的功能。根据功能强大等功能,您可以将自己与容器结合在一起。我认为这也很好,因为他们拯救了你多少丑陋和努力。
答案 1 :(得分:1)
如果你想让Guice为你注入你的物体,那么你的物体就会与Guice联系在一起。这就是Guice的工作方式。您可以通过创建自己的Factory接口并注入它来使用Provider接口,但是您仍然必须在某处将@Inject连接到Guice。
就我个人而言,我认为你应该重新考虑你与Guice的0耦合的要求,但如果你必须能够编写没有引用你的DI容器的类,你应该看看像Spring这样的东西。