在Dropwizard应用程序中的Guice AbstractModule中注入配置
我正在开发一个使用Guice和Dropwizard开发的应用程序,我们在这里创建不同的bundle,如guice bundle,migrations bundle等,并将它们添加到initialize()方法的bootstrap中。
我正在尝试在MyModule类中注入配置对象,但无法这样做。
以下是Application类的代码:
public class MyApplication extends Application<MyConfiguration> {
public static void main(String args[]) throws Exception {
new MyApplication().run(args);
}
private GuiceBundle<MyConfiguration> guiceBundle = GuiceBundle.<MyConfiguration> newBuilder()
.addModule(new MyModule()).enableAutoConfig(getClass().getPackage().getName())
.setConfigClass(MyConfiguration.class).build(Stage.DEVELOPMENT);
@Override
public void initialize(Bootstrap<MyConfiguration> bootstrap) {
bootstrap.addBundle(guiceBundle);
}
@Override
public void run(MyConfiguration configuration, Environment environment) throws Exception {
...
}
}
下面是扩展AbstractModule的Module类:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
}
}
使用这种方法,我发现很难在Module类中注入Configuration对象,因为Configuration对象在initialize()方法中不可用,但在run()方法中可用。
有没有其他方法可以做到这一点?
注意:我知道另一种方法,您可以在run()方法中创建Module类的对象,以创建注入器(将配置和环境对象作为MyModule类的构造函数中的参数传递)。 但是这需要我注册run()方法中的所有托管对象和所有资源。 我想避免这样做。
Guice模块是存储配置的类,并且在创建注入器时解析。 你不能在模块中明确插入一个对象。
如果不考虑GuiceBundle
内部,我不认为我能够告诉你更多。
上一篇: Inject Configuration in Guice AbstractModule in Dropwizard Application