Java 在播放模块配置中访问application.conf

Java 在播放模块配置中访问application.conf,java,playframework,guice,Java,Playframework,Guice,我正在尝试使用Guice配置数据库客户机实例以创建抽象模块,但我无法使用依赖项注入访问application.conf,因为尚未创建注入程序 这是我的密码 @Singleton public class DatastoreModule extends AbstractModule { @Inject private Config config; @Override public void configure() { MongoClient m

我正在尝试使用Guice配置数据库客户机实例以创建抽象模块,但我无法使用依赖项注入访问application.conf,因为尚未创建注入程序

这是我的密码

@Singleton
public class DatastoreModule extends AbstractModule {

    @Inject
    private Config config;

    @Override
    public void configure() {

        MongoClient mongo = new MongoClient(
                config.getString("mongodb.host"),
                config.getInt("mongodb.port")
        );

        Morphia morphia = new Morphia();

        Datastore datastore = morphia.createDatastore(
                mongo,
                config.getString("mongodb.databaseName")
        );

        bind(Datastore.class).toInstance(datastore);
    }
}

如何在不使用不推荐的Play.configuration API的情况下访问配置?

您可以在构造函数中传递它(在Scala中)。下面是我的项目中的示例

class Guard(environment: Environment, configuration: Configuration) extends AbstractModule{
在Java中,它是相同的:

public class DatastoreModule extends AbstractModule {

  private final Environment environment;
  private final Config config;

  public DatastoreModule(Environment environment, Config config) {
    this.environment = environment;
    this.config = config;
  }

  ...

}
更多详情:

只是不要过度使用它:

在大多数情况下,如果在创建组件时需要访问Config,则应将Config对象注入组件本身或组件的提供程序中。然后,您可以在创建组件时读取配置。在为组件创建绑定时,通常不需要读取配置


我很少使用它。将配置注入组件本身几乎总是更好的

那么,初始化诸如数据库客户端之类的服务的最佳方法是什么呢?对我来说,最合乎逻辑的方法是创建一个实例并直接绑定它,但我仍然不熟悉DI的概念,所以我很乐意了解最佳实践。您只需将其初始化为单例,并在单例中执行所有设置。您可以研究一个开源项目。例如,这个示例:简单绑定到类:然后在绑定的单例中执行所有操作:我给出的guice模块配置示例(不推荐使用)来自正在使用的PAC4J集成。这是一个复杂的项目,有很多设置,也有很多平台的支持。因此,作者坚持其自身的配置和体系结构愿景,必须适应许多不同的框架: