如何绑定具体类?

2024-04-06

我有这门课:

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;
    }
}

Where Door, Window and Roof是具体的类。现在,如果我想为这种情况实现一个模块,我会这样做:

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);
    }
}

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


这是要走的路:

protected void configure() {
    bind(Door.class);
    bind(Window.class);
    bind(Roof.class);
}

正如 Guice 所说,由于它们是具体的类,因此您不能将它们绑定到自身:-)

查看Binder https://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/Binder.html文档,它指出:

bind(ServiceImpl.class);

该语句本质上没有任何作用;它“绑定了ServiceImpl类本身”并且不会改变 Guice 的默认行为。如果你更喜欢你的,你可能仍然想使用它Module类作为其提供的服务的显式清单。此外,在极少数情况下,Guice 可能无法在注入器创建时验证绑定,除非明确给出。

构造函数标记为的具体类@Inject https://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/Inject.html自动可用于注射。但它可以帮助开发人员(您)了解模块中配置的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何绑定具体类? 的相关文章

随机推荐