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

如果未注入构造函数,Guice方法注入是否有效?

宗政和韵
2023-03-14

我有一个类,我需要注入一个变量,但构造函数没有注入guice。

public class Foo{
  private boolean x;
  public Foo(){
     //sets some variables
  }

  @Inject
  public void setX(boolean x){
     this.x=x;
  }
}

x的值未被注入。guice是否有必要在构造函数中使用注入来识别方法注入?我是否需要从其他类调用此方法才能工作?Thanx提前

共有1个答案

景子安
2023-03-14

如果您要使用Guice来@InjectFoo,那么Guice需要创建对象——从注入器或从单独类中的另一个@Inject点。Guice无法帮助您注入它没有创建的对象。

在这种情况下,没有必要向构造函数添加注入,因为Guice可以自动注入无参数构造函数。例如:

public class MethodInjectionTest {

  static class Foo {
    private boolean x;
    public Foo(){
      //sets some variables
    }

    @Inject
    public void setX(boolean x){
      this.x=x;
    }
  }

  Injector i = Guice.createInjector(new AbstractModule() {
    protected void configure() {
      bind(Boolean.class).toInstance(Boolean.TRUE);
    }
  });

  @Test
  public void methodInjection() {
    Foo foo = i.getInstance(Foo.class);
    assertThat(foo.x, is(true));
  }

  // EDIT: An example based on the comment by @JeffBowman
  @Test
  public void memberInjection() {
    Foo foo = new Foo();
    i.injectMembers(foo);
    assertThat(foo.x, is(true));
  }

}

如果您的真实世界类在构建期间需要将GUI控制的依赖项与客户机提供的依赖项混合,请查看辅助注入

 类似资料:
  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 主要内容:输出注入是将依赖注入对象的过程。构造函数注入很常见。在这个过程中,依赖被作为参数注入到构造函数中。请参阅下面的示例。 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。

  • 问题内容: 假设我有一些类似以下的课程。(为简单起见,这是一个虚构类。) 由于我使用不同的实现,并且可能想对该发送功能进行单元测试,因此我认为我应该注入in 的方法。但是我该怎么做呢? 我见过的所有我理解的Guice示例似乎都是在构造函数中进行注入的: 但是我的类在其构造函数中接受了一个参数,我不想注入该参数。那我该怎么办呢? (注意:我是一个完整的Google Guice noob。我认为我了解

  • 请帮助理解在哪种情况下我应该使用构造函数注入和设置器注入。请帮我举个合适的例子。 先谢谢你。

  • 我把下面的内容看做是构造函数和setter注入的区别之一。有人能用一些简单的例子解释一下下面的区别吗,我对术语完全功能对象和不完全对象有点困惑。 -

  • 我正试图从这篇中级文章中学习Dagger2,并将RequestQueue作为活动级依赖项传递:https://proandroiddev.com/dagger-2-annotations-binds-contributesandroidinjector-a09e6a57758f我可以很好地创建应用程序组件,但我在ContributesAndroidInjector方面遇到了很多麻烦。应用类别: 应