使用Guice注入依赖关系适用于一种方法,而不是另一种方法

时间:2015-01-30 01:15:38

标签: java dependency-injection guice

我的应用正在经历一个“怪异的”#34; Guice问题。不知何故,服务是在一种方法中注入而不是在另一种方法中注入。我不确定原因:

public class MyServerResource {

    @Inject
    MyService myService;

    @Override
    public void create() {
        if(myService == null){
            // This one is not thrown
            throw new RuntimeException("Service is null");
        }
    }

    @Override
    public void get() {
        if(myService == null){
            // This one is  thrown
            throw new RuntimeException("Service is null");
        }
    }

}

在create()方法中,服务不为null,而在get()方法中,服务为null。这是什么样的Guice行为?有没有人经历过这个?

1 个答案:

答案 0 :(得分:4)

首选构造函数注入字段和方法注入。

public class MyServerResource {

  private final MyService myService;

  @Inject
  public MyServerResource(MyService myService) {
    this.myService = myService;
  }

  @Override
  public void create() {
    // myService isn't null here
  }

  @Override
  public void get() {
    // myService isn't null here
  }
}

这种方法有很多好处:

  • "不可变"类(类成员在构造函数中初始化)
  • 更好的单元测试用例。您只需要为构造函数提供模拟服务。