Quickstart

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) ;)