【问题标题】:Inject Configuration in Guice AbstractModule in Dropwizard Application在 Dropwizard 应用程序中的 Guice AbstractModule 中注入配置
【发布时间】:2017-10-18 10:55:00
【问题描述】:

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

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

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() 方法中注册所有托管对象和所有资源。我想避免这样做。

【问题讨论】:

标签: java dependency-injection guice dropwizard


【解决方案1】:

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

如果不查看GuiceBundle 的内部信息,我想我无法告诉你更多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 2016-07-26
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多