如何在Google-Guice中实现动态绑定?

时间:2011-12-01 14:13:06

标签: java guice restlet-2.0

我正在尝试将服务外观实现到服务中以支持向后兼容性。

但是,我在Guise动态绑定中面临问题。我需要根据客户端应用程序请求的版本绑定相应的实现者类。

有谁知道如何在Google-Guice中实现动态绑定?

1 个答案:

答案 0 :(得分:2)

您可以使用绑定annotations

bind(Facade.class).annotatedWith(VersionOne.class).to(OldFacade.class);
bind(Facade.class).annotatedWith(VersionTwo.class).to(NewFacade.class);

并且代码如下:

@Inject @VersionOne Facade oldFacade;
@Inject @VersionTwo Facade newFacade;
if (version == 1)
    return oldFacade
else
    return newFacade;

或者您可以使用multibindings

MapBinder<Integer, Facade> mapBinder = MapBinder.newMapBinder(binder(), Integer.class, Facade.class);
mapBinder.addBinding(1).to(OldFacade.class);
mapBinder.addBinding(2).to(NewFacade.class);

然后你就像这样使用它:

@Inject Map<Integer, Facade> facadeMap;
return facadeMap.get(version);