Imagine you have some Services and several Implementation of these, like these:
package service;
public interface Foo { ... }
package service;
public interface Bar{ ... }
package service.test;
@AutoBind(Foo.class}
public class TestFoo implements Foo { ... }
package service.test;
@AutoBind(Bar.class}
public class TestBar implements Bar { ... }
package service.production;
@AutoBind(Bar.class}
public class ProductionBar implements Bar { ... }
... you get the picture ...
Note the @AutoBind annotation in the examples above. Now in order to bind a bunch of classes, you just have to provide a PackageName (where to look for @AutoBind-annotated classes), a Matcher (which ones) and (optionally) a Scope to bind to.
In your Modules just add:
install(new SimpleAutoBindingModule("service.production", Matchers.any(), Scope.SINGLETON));
and you´re done. If you want to do more sophisticated things, take a look at AbstractAutoBindingModule.
And yes, it plays well together with @ImplementedBy (if using them both does not do funny things with your brain in some corner cases) ;)