I've released ServiceBinder 0.2 to Maven Central (details below; soon to be 0.3 with more documentation). I wrote this to fix a common problem for my projects.
I like using the JDK ServiceLoader
for discovery: it is simple to use and understand and always available. And Kawaguchi's META-INF/services generator makes use as simple as an annotation.
However, ServiceLoader
is missing one key feature for me. It requires a default constructor for implementations, and I am a fan of constructor injection.
ServiceBinder fills this gap. It discovers service classes as ServiceLoader does, and injects them with Guice or Spring. See the GitHub site for examples and source. A taste:
Guice
public final class SampleModule extends AbstractModule { @Override protected void configure() { ServiceBinder.with(binder()).bind(Bob.class); } }
Spring Framework
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.register(AppConfig.class); ServiceBinder.with(context).bind(Bob.class); context.refresh();