在 Dropwizard 应用程序中的 Guice 抽象模块中注入配置



我正在开发一个使用 Guice 和 Dropwizard 开发的应用程序,我们正在创建不同的捆绑包,如 guice 捆绑包、迁移捆绑包等,并将它们添加到 initialize() 方法中的引导程序中。

我正在尝试在 MyModule 类中注入配置对象,但无法这样做。

以下是应用程序类的代码:

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() {
}
}

使用这种方法,我发现很难在模块类中注入配置对象,因为配置对象在 initialize() 方法中不可用,但在 run() 方法中可用。

有没有其他方法可以做到这一点?

注意:我知道另一种方法可以在run()方法中创建模块类的对象以创建注入器(配置和环境对象作为参数在MyModule类的构造函数中传递)。但这需要我在 run() 方法中注册所有托管对象和所有资源。我想避免这样做。

Guice 模块是存储配置的类,在创建注入器时解析。不能在模块中显式注入对象。

如果不调查内部GuiceBundle,我想我无法告诉你更多.

最新更新