![](/img/trans.png)
[英]how does inheritance work in java when a method in abstract class call a method that has been overriden?
[英]How to call a method in a class after the application has been initalized?
我有如下课程。 我希望在应用程序或 DataService 类初始化之后和 DataHandler 初始化之前调用 DataService 构造函数中的语句本身。 但是 dataLoader 对象在构造函数中为空。 我是 guice 的新手,想知道如何使用 GUICE 实现这一目标
@Singleton
@Managed
class DataService{
@Inject private DataLoader dataLoader;
DataService(){
dataLoader.load(); // I am trying to udnerstand why dataLoader is null?
}
}
@Singleton
@Managed
class DataHandler{
@EventHandler
public void handle(StaticData data){
//some logic om data
}
}
Class StaticDataModule extends AbstractModule{
@Override
protected void configure(){
bind(DataService.class).asEagerSingletin();
bind(DataHandler.class).asEarSingleton();
}
}
dataLoader
为null
因为它尚未初始化您请求注入一个字段,但您尝试在它被初始化之前调用它。
依次执行什么?
private double pi = 3.14;
您必须了解 Guide 位于构造函数之外,甚至是@Inject
。 当您实例化一个对象时,首先调用其构造函数,然后注入字段。 这就像在 Spring 或 Java EE 中一样:初始化是使用另一种方法完成的,在@PostConstruct
注释。 但是 Guide 没有这样的注释。
因此,解决您的问题的解决方案是
@PostConstruct
的方法。例子:
Injector injector = Guice.createInjector(...);
DataService dataService = injector.getInstance(DataService.class);
dataService.init();
您的DataService
如下所示:
class DataService {
@Inject DataLoader loader;
void init() {
loader.load();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.