IAm*_*aja 13 java dependency-injection guice
我对Guice的理解是:
@Inject public class Widget(Dep one, Dep two))意味着 Guice每次通过一个调用时都会注入该构造函数Injector; 和@Inject public void setDepOne(Dep one))意味着 Guice将始终在调用该方法时注入该方法,只要该Widget对象是使用Guice创建的Injector这两个假设是否正确?如果没有,请澄清!
所以我所依赖的是:现场注入的含义是什么?
@Inject private Dep one;
Run Code Online (Sandbox Code Playgroud)
这是否意味着当通过Guice注入器创建对象时,Guice将始终注入属性?在那种情况下,我会想象它与构造函数级注入冲突.
例如,以下是否会导致冲突/错误:
public class Widget {
@Inject private Dep one;
private Dep two;
// Dep one already injected as a field!
@Inject public Widget(Dep one, Dep two) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Rya*_*son 22
Guice将始终注入所有字段,方法和任何带注释的单个构造函数@Inject.请记住,构造函数始终首先被注入,因此您的注释字段实际上将覆盖该注入.拿这个修改过的例子:
class Widget {
@Inject
private Dep one;
@Inject
public Widget(Dep one) {
this.one = one;
System.out.println(one);
}
public void printDependency() {
System.out.println(one);
}
}
class Dep {}
public class MyMain {
public static void main(String[] args) {
Injector i = Guice.createInjector();
i.getInstance(Widget.class).printDependency();
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,这将生成如下内容:
com.example.Dep@63238bd2
com.example.Dep@69198891
Run Code Online (Sandbox Code Playgroud)
显然有两个不同的对象.第一行是构造函数; 第二是现场注入.
除了在编写Guice代码示例时减少冗长,我还没有经常找到用于场注入的用法.在生产代码中,它是不明智的,因为它使代码难以测试.
| 归档时间: |
|
| 查看次数: |
13892 次 |
| 最近记录: |