gpt4 book ai didi

java - 从 guiceModule 访问 dropwizard Bundle 实例

转载 作者:行者123 更新时间:2023-12-02 11:21:51 25 4
gpt4 key购买 nike

我是 dropwizard 的新手,并且在我的应用程序中使用 GuiceBundle 和 MongoBundle。MongoClient 包装在 dropwizard Managed 对象中,并与应用程序的生命周期相关联。

public class SalApplication extends Application<SomeConf> {
...
private GuiceBundle<SomeConf> guiceBundle;
private MongoBundle<SomeConf> mongoBundle;
...

@Override
public void initialize(Bootstrap<SomeConf> bootstrap) {
// build bundles and add to bootstrap
...
}

@Override
public void run(SomeConf someConf, Environment env) throws Exception{
...
MongoClient client = mongoBundle.getClient();
MongoClientManager mongoDB = new MongoClientManager(client);
env.lifecycle().manage(mongoDB); //MongoClientManager implements Managed
}

我的问题是,如何获取 MongoClient 对象。该对象应该被注入(inject)到我的 DAO 中。但是如何从 guice 模块内部访问 MongoClient 对象

如果我在 guice 模块内构造另一个 MongoClient 对象,那么托管对象的意义是什么。我真的很困惑。

最佳答案

我建议您编写自己的 Guice 模块。虽然 dropwizard-guice 非常有用,但它自 2017 年 2 月以来就没有更新过,并且仅支持 DW 1.0.0 版本。模块的基本版本可能如下所示:

public class CustomModule implements Module {

private final MongoClient mongoClient;

public CustomModule(MongoClient mongoClient) {
this.mongoClient = mongoClient;
}

@Override
public void configure(Binder binder) {
binder.bind(MongoClient.class).toInstance(mongoClient);
}
}

然后您可以使用 Guice 标准方法从 Application 类中的“run”方法进行初始化:

public class SalApplication extends Application<SomeConf> {

...

@Override
public void run(SomeConf someConf, Environment env) throws Exception{

Guice.createInjector(new CustomModule(mongoBundle.getClient());

...
}
}

关于java - 从 guiceModule 访问 dropwizard Bundle 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49853580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com