You could do something very simple like this:
class Module extends AbstractModule {
Properties properties;
Module(Properties properties) {
this.properties = properties;
}
@Override
protected void configure() {
for (Entry<Object, Object> entry: properties.entrySet()) {
try {
Class<?> abstractClass = Class.forName((String)entry.getKey());
Class implementation = Class.forName((String)entry.getValue());
bind(abstractClass).to(implementation);
} catch (ClassNotFoundException e) {
//Handle e
}
}
}
}
Note that the properties file will need to contain fully qualified class names for this to work. I noticed your question uses short class names. Have a look at this question to add support for that.
Spring has extensive support for XML based configuration, which might be a better option depending on what you're trying to do. Keeping your bindings in code is nice because they survive refactoring.
And if you're trying to allow clients to add functionality to your application SPI might be a better bet.