我有这门课:
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(使用前将#替换为@)