Guice Beginner - How to bind concrete classes?

倾然丶 夕夏残阳落幕 提交于 2019-12-02 20:02:37
edwardw

Guice's Just-In-Time binding does exactly what you want. Given your Door, Window and Roof meet following requirements (quoted from the Guice documentation):

either a public, no-arguments constructor, or a constructor with the @Inject annotation

an empty Module implementation will be sufficient:

public class HouseModule extends AbstractModule {
    @Override
    protected void configure() {
    }
}
Jalayn

This is the way to go:

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

Since they are concrete classes, as Guice says, you can't bind them to themselves :-)

Check out the Binder docs, it notes:

bind(ServiceImpl.class);

This statement does essentially nothing; it "binds the ServiceImpl class to itself" and does not change Guice's default behavior. You may still want to use this if you prefer your Module class to serve as an explicit manifest for the services it provides. Also, in rare cases, Guice may be unable to validate a binding at injector creation time unless it is given explicitly.

Concrete classes with constructor marked as @Inject are automatically available for injection. But it helps the developer (you) know what is configured in the module.

Binding is needed to link Interface and Implementation class (to change to other implementation in test env for example). But since you have concrete classes, no need for binding to, just bind classes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!