一尘不染

Guice初学者-如何绑定具体课程?

java

我有这个课:

public class House {
    private final Door door;
    private final Window window;
    private final Roof roof;

    @Inject
    public House(Door door, Window window, Roof roof) {
        this.door = door;
        this.window = window;
        this.roof = roof;
    }
}

其中DoorWindowRoof是具体的类。现在,如果我想为这种情况实现一个模块,我会这样做:

public class HouseModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Door.class).to(Door.class);
        bind(Window.class).to(Window.class);
        bind(Roof.class).to(Roof.class);
    }
}

但是我想知道这是否是绑定具体类的正确方法,还是有更简单的方法。我觉得有一个更简单的方法。

编辑

只是尝试了一下,它似乎不起作用:

1) Binding points to itself.
  at de.tarent.guice.ex._1.HouseModule.configure(HouseModule.java:10)

编辑2

似乎根本不需要绑定:

Injector injector = Guice.createInjector();
House house = injector.getInstance(House.class);

似乎也可以。


阅读 178

收藏
2020-12-03

共1个答案

一尘不染

Guice的即时绑定正是您想要的。根据您的DoorWindowRoof满足以下要求(从Guice
文档中引用):

公共的,无参数的构造函数或带有@Inject批注的构造函数

一个空的Module实现就足够了:

public class HouseModule extends AbstractModule {
    @Override
    protected void configure() {
    }
}
2020-12-03