Java 在播放模块配置中访问application.conf
我正在尝试使用Guice配置数据库客户机实例以创建抽象模块,但我无法使用依赖项注入访问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
@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集成。这是一个复杂的项目,有很多设置,也有很多平台的支持。因此,作者坚持其自身的配置和体系结构愿景,必须适应许多不同的框架: