A Dropwizard bundle to handle Guice integration.
<dependencies>
<dependency>
<groupId>com.hubspot.dropwizard</groupId>
<artifactId>dropwizard-guicier</artifactId>
<version>1.3.5.2</version>
</dependency>
</dependencies>
Simply install a new instance of the bundle during your service initialization
public class ExampleApplication extends Application<ExampleConfiguration> {
public static void main(String... args) throws Exception {
new ExampleApplication().run(args);
}
@Override
public void initialize(Bootstrap<ExampleConfiguration> bootstrap) {
GuiceBundle<ExampleConfiguration> guiceBundle = GuiceBundle.defaultBuilder(ExampleConfiguration.class)
.modules(new ExampleModule())
.build();
bootstrap.addBundle(guiceBundle);
}
@Override
public void run(ExampleConfiguration configuration, Environment environment) throws Exception {}
}
Configuration
and Environment
are available to eager singletons (injector is also
created with Stage.PRODUCTION
by default) GuiceBundle
can extend DropwizardAwareModule
which gives them
access to the Bootstrap
, Configuration
, and Environment
inside of the configure
method. This can be used to do conditional
binding, for exampleManaged
, Task
, HealthCheck
, or ServerLifecycleListener
bound in Guice will be added to Dropwizard for you, for example (must be eager singletons for this to work)There is an example project you can clone and play with if you'd like to get going right away.
There are a couple important changes to be aware of when upgrading from dropwizard-guice.
Reasoning and potential workarounds are discussed here (fwiw we've ditched AutoConfig internally and have never looked back).
By default, dropwizard-guicier installs a module which makes Guice run in a more strict mode. In particular, just-in-time bindings are disabled and all objects must be explicitly bound. In addition, it requires that no-arg constructors are annotated with @Inject
for Guice to use them. You can opt out of having this module installed by calling enableGuiceEnforcer(false)
when constructing your GuiceBundle
.