Through the magic of ServiceLoader
you can automate the wiring of your classpath components:
public static void main(final String... args) { final Injector injector = Guice.createInjector( ServiceLoader.load(Module.class).iterator()); // Use injector here, etc. }
For each jar or classpath component, include a META-INF/services/com.google.inject.Module
file containing the class name of a Guice module which can configure the jar, e.g., hm.binkley.rice.MobModule
.
This makes your jars auto-configuring. Merely including them in the classpath is sufficient to be injected into your application. You will find multibindings useful for each jar to provide a well-known list of services without them colliding.
1 comment:
This is the exact technique I used in the past, but since I've moved to using an annotation processor (adapted from sezpoz) to auto-load my Guice modules and register other services.
Post a Comment