我对Guice的理解是:
@injectpublic-class小部件(Dep-one,Dep-two)
)意味着每次通过注入器调用Guice时,它都会注入该构造函数;和
这两个假设正确吗?如果没有,请澄清!
所以我所担心的是:场级注入的含义是什么?
@Inject private Dep one;
这是否意味着当通过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) {
// ...
}
}
提前感谢!
你的假设是正确的。我相信在这种特殊情况下,Guice将注入one
两次——一次通过构造函数,一次通过字段——如果没有其他内容的话,因为它无法知道它们将进入同一个字段。
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();
}
}
运行时,会产生如下结果:
com.example.Dep@63238bd2
com.example.Dep@69198891
显然是两个不同的对象。第一行是构造函数;第二种是现场注入。
除了在编写Guice代码示例时减少冗长之外,我还没有发现字段注入的用途。在生产代码中,这是不明智的,因为它使代码难以测试。
我正在使用 scala play 2.5,在尝试在我的一个控制器中注入对象时出现以下错误。我正在使用 play 给出的默认注入框架,即 Guice。 这是控制器: 以下是我想注入的服务: 这就是我使用它的方式:
我上了如下的课,效果很好 现在,我没有直接使用EmpService,而是创建了一个接口,EmpService实现了该接口,如下所示。 所以现在我的资源类必须使用接口,但我不确定如何引用它必须使用的实现。 我看到了这个,我不确定我的绑定应该去哪里。(这是我第一个与Guice相关的项目,所以我是一个完全的新手)。 这就是“未绑定com.api.EmpService的实现”出现的错误这完全可以理解,但不
主要内容:Google Guice 按需注入 示例,输出注入是将依赖注入对象的过程。方法和字段注入可用于使用injector.injectMembers()方法使用退出对象进行初始化。请参阅下面的示例。 Google Guice 按需注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。
主要内容:Google Guice 可选注入 示例,输出注入是将依赖注入对象的过程。可选注入意味着如果存在则注入依赖项。方法和字段注入可能是可选的依赖项,如果不存在依赖项,则应该有一些默认值。请参阅下面的示例。 Google Guice 可选注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。
主要内容:Google Guice 字段注入 示例,输出注入是将依赖注入对象的过程。字段注入用于将值对象设置为对对象字段的依赖。请参阅下面的示例。 Google Guice 字段注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。
主要内容:Google Guice 方法注入 示例,输出注入是将依赖注入对象的过程。方法注入用于将值对象设置为对象的依赖项。请参阅下面的示例。 Google Guice 方法注入 示例 创建一个名为 GuiceTester 的 Java 类。 输出 编译并运行该文件,您将看到以下输出。