Java 如何在启动时访问Lagom服务中的配置?

Java 如何在启动时访问Lagom服务中的配置?,java,lagom,Java,Lagom,我正在将Spring/J2EE中当前的应用程序迁移到Lagom。我在Java工作。我需要从配置中读取变量(参考资料文件夹中的application.conf)。在实现模块中,我尝试将配置作为类变量注入,如下所示 @注入 专用配置 但当我在构造函数中访问这个配置对象时,它会给出null指针异常 整个代码是这样的 import play.Configuration; public class SomeServiceImpl implements SomeService { @Inject

我正在将Spring/J2EE中当前的应用程序迁移到Lagom。我在Java工作。我需要从配置中读取变量(参考资料文件夹中的application.conf)。在实现模块中,我尝试将配置作为类变量注入,如下所示

@注入 专用配置

但当我在构造函数中访问这个配置对象时,它会给出null指针异常

整个代码是这样的

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-没有任何方法允许您在创建服务后运行代码。您的意思是
服务
已创建为(对象已构造?)您是否尝试在服务构造函数本身中运行代码?是的,我尝试使用服务的构造函数,但它不起作用,因为我要执行的代码必须在创建服务后运行。我在文档中找不到与此相关的任何内容。