package com.jasonclawson.dropwizardry.guice; import com.jasonclawson.dropwizardry.guice.support.GuiceBootstrapModule; import com.jasonclawson.dropwizardry.guice.support.GuiceSupport; import io.dropwizard.Application; import io.dropwizard.Configuration; import io.dropwizard.setup.Environment; import io.dropwizard.util.Generics; /** * Extend this class instead of <code>Application</code> in order to get guice support. * * You will be required to implement the method <code>configure(T, Builder<T>)</code>. Add * your Guice modules to the Builder. <code>configure</code> is analgous to <code>run</code>. * * @author jclawson * * @param <T> */ public abstract class GuiceApplication<T extends Configuration> extends Application<T> { @Override public final void run(T configuration, Environment environment) throws Exception { GuiceSupport.Builder<T> guiceBuilder = GuiceSupport.newBuilder(); configure(configuration, guiceBuilder); @SuppressWarnings("unchecked") Class<T> configurationClass = (Class<T>) Generics.getTypeParameter(this.getClass()); //this will initialize any registered bundles guiceBuilder.addModule(new GuiceBootstrapModule()); GuiceSupport<T> guiceBundle = guiceBuilder .setConfigClass(configurationClass) .build(); guiceBundle.run(configuration, environment); //intialize the injector guiceBundle.getInjector(); } public abstract void configure(T configuration, com.jasonclawson.dropwizardry.guice.support.GuiceSupport.Builder<T> guiceBuilder); }