Java 如何在启动时访问Lagom服务中的配置?
我正在将Spring/J2EE中当前的应用程序迁移到Lagom。我在Java工作。我需要从配置中读取变量(参考资料文件夹中的application.conf)。在实现模块中,我尝试将配置作为类变量注入,如下所示 @注入 专用配置 但当我在构造函数中访问这个配置对象时,它会给出null指针异常 整个代码是这样的Java 如何在启动时访问Lagom服务中的配置?,java,lagom,Java,Lagom,我正在将Spring/J2EE中当前的应用程序迁移到Lagom。我在Java工作。我需要从配置中读取变量(参考资料文件夹中的application.conf)。在实现模块中,我尝试将配置作为类变量注入,如下所示 @注入 专用配置 但当我在构造函数中访问这个配置对象时,它会给出null指针异常 整个代码是这样的 import play.Configuration; public class SomeServiceImpl implements SomeService { @Inject
import play.Configuration;
public class SomeServiceImpl implements SomeService {
@Inject
private Configuration config;
public SomeServiceImpl() {
//getting configuration from application.conf
// gives exception as config is null.
String key = config.getString(“key”);
}
@Override
public ServiceCall<Request, Response> send() {
//works here, does not give exception
String key = config.getString(“key”);
}
}
导入播放配置;
公共类SomeServiceImpl实现SomeService{
@注入
私有配置;
公共服务impl(){
//从application.conf获取配置
//当配置为空时给出异常。
String key=config.getString(“key”);
}
@凌驾
公共服务呼叫发送(){
//在这里工作,不例外
String key=config.getString(“key”);
}
}
对不起,我从一开始就应该说清楚。我已编辑了原始问题。当我试图从构造函数中的配置对象读取时,会出现空指针异常,但我能够在服务调用实现中使用它。我想要某种方式,使我能够在启动时访问application.conf中的配置,并可能将其存储在某个配置类中,以后可以在任何地方访问这些配置类 在Java中,当一个对象被实例化时,发生的第一件事(在其他任何事情可能发生之前)是调用构造函数。之后,像Guice(Lagom使用的)这样的框架可以自由地注入东西,但在调用构造函数之前,它们不能这样做。因此,当调用构造函数时,所有带
@Inject
注释的字段都将为空,对此您无能为力
所以,不要使用字段注入,使用构造函数注入,例如:
import play.Configuration;
public class SomeServiceImpl implements SomeService {
private final Configuration config;
@Inject
public SomeServiceImpl(Configuration config) {
this.config = config;
String key = config.getString("key");
}
@Override
public ServiceCall<Request, Response> send() {
String key = config.getString("key");
}
}
导入播放配置;
公共类SomeServiceImpl实现SomeService{
私有最终配置;
@注入
公共SomeServiceImpl(配置){
this.config=config;
String key=config.getString(“key”);
}
@凌驾
公共服务呼叫发送(){
String key=config.getString(“key”);
}
}
构造函数注入不仅推荐用于此用例,您还应该在任何地方使用它,它避免了所有这些潜在问题。欢迎使用堆栈溢出!你自己试过什么吗?如果是这样,请分享你的代码。我确实搜索了api和文档,但找不到方法。服务api-没有任何方法允许您在创建服务后运行代码。您的意思是
服务
已创建为(对象已构造?)您是否尝试在服务构造函数本身中运行代码?是的,我尝试使用服务的构造函数,但它不起作用,因为我要执行的代码必须在创建服务后运行。我在文档中找不到与此相关的任何内容。