依赖注入似乎是一件好事.一般来说,依靠是否需要注入方法,还是将其注入课堂的教唆者?
请参阅下面的示例来演示注入相同依赖关系的两种方式.
//Inject the dependency into the methods that require ImportantClass Class Something { public Something() { //empty } public void A() { //do something without x } public void B(ImportantClass x) { //do something with x } public void C(ImportantClass x) { //do something with x } } //Inject the dependency into the constructor once Class Something { private ImportantClass _x public Something(ImportantClass x) { this._x = x; } public void A() { //do something without x } public void B() { //do something with this._x } public void C() { //do something with this._x } }
构造器注入的主要优点是它允许您的字段标记为最终.例如:
原文链接:https://www.f2er.com/javaschema/281859.htmlclass Foo { private final Bar _bar; Foo(Bar bar) { _bar=bar; } }
以下页面有一个很好的pro和con的列表:Guice Best Practices:
方法注射
>不是现场注射
>只有对某些奇怪的情况有效的东西
构造器注入
>字段可以是最终的!>注射不可能被跳过>轻松查看依赖关系一目了然>这是建设的想法是什么> – 无可选注射> – 当DI库无法实现本身时无用> – 子类需要“知道”他们的超类所需的注入> – 不太方便测试,只有“关心”其中一个参数