我正在将Spring / J2EE中的当前应用程序迁移到Lagom . 我在Java工作 . 我需要从配置中读取变量(resources文件夹中的application.conf) . 在实现模块中,我尝试将配置作为类变量注入
@Inject private Configuration config
但是当我在构造函数中访问此配置对象时,它会给出空指针异常 .
整个代码是这样的
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”);
}
}
对不起,我应该从一开始就明白了 . 我已经编辑了原始问题 . 当我尝试从构造函数中的配置对象读取时,我得到空指针异常,但我能够在服务调用实现中使用它 . 我想要一些方法,我可以在启动时访问application.conf中的配置,并可能存储在某个配置类中,以后可以在任何地方访问 .
1 回答
在Java中,当一个对象被实例化时,发生的第一件事(在可能发生任何其他事情之前)是调用构造函数 . 在那之后,像Guice(Lagom使用)这样的框架可以自由地注入东西,但是在调用构造函数之前它们不能这样做 . 因此,当调用构造函数时,所有
@Inject
带注释的字段都将为null,您无法解决这个问题 .所以,不要使用场注入,使用构造函数注入,例如:
构造函数注入不仅仅推荐用于此用例,您应该在任何地方使用它,它避免了所有这些潜在的问题 .