当前位置: 首页 > 知识库问答 >
问题:

Guice:现场注入的含义

东郭阳德
2023-03-14

我对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) {
        // ...
    }
}

提前感谢!


共有2个答案

国俊艾
2023-03-14

你的假设是正确的。我相信在这种特殊情况下,Guice将注入one两次——一次通过构造函数,一次通过字段——如果没有其他内容的话,因为它无法知道它们将进入同一个字段。

暨成双
2023-03-14

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 类。 输出 编译并运行该文件,您将看到以下输出。