Guice通过属性(外部文本文件中的字符串)/运行时更改绑定

时间:2011-11-24 13:30:20

标签: java guice

如何通过属性/文本文件中给出的属性/字符串更改/设置绑定?在我的情况下,我想实现一种“演示模式”。 在正常模式下,属性为外部服务提供URL,但如果url为“demo”,则应更改相应接口的绑定,如下所示:

正常:

bind(SasDatenProvider.class).to(SasDataProviderHttpImpl.class);

演示

bind(SasDataProvider.class).to(SasDataProviderFileImpl.class);

如何实现? thx提前

1 个答案:

答案 0 :(得分:2)

您可以在模块中使用带@Provides注释的方法。然后你可以做这样的事情:

public class MyModule extends AbstractModule {

    @Provides
    SasDatenProvider provideSas(SasDataProviderHttpImpl http, 
        SasDataProviderFileImpl file){

        boolean isDemo = false; /* do you property lookup logic here */

        return isDemo ? file : http;
    }
}

您可以在guice文档中详细了解@Provides - 方法: http://code.google.com/p/google-guice/wiki/ProvidesMethods

如果你不想在你的模块中使用这种逻辑,你可以考虑创建自己的提供者: http://code.google.com/p/google-guice/wiki/ProviderBindings