我对在变量上使用Inject感到迷茫。

我使此代码正常工作:

private XXServiceAsync xxServiceAsync;

@Inject
protected IndexViewImpl(EventBus eventBus, XXServiceAsync tableManagementServiceAsync) {
    super(eventBus, mapper);

    this.xxServiceAsync = xxServiceAsync;
    initializeWidgets();
}

使用此代码,我可以在班级中任何需要的地方调用RPC服务(单击时...)
我想通过直接注入变量来清除一些代码;这样做 :
@Inject
private XXServiceAsync xxServiceAsync;


protected IndexViewImpl(EventBus eventBus) {
    super(eventBus, mapper);
    initializeWidgets();
}

这始终将服务保持为NULL。
难道我做错了什么 ?带有rpc服务的GIN魔术是否应该以其他方式完成?

谢谢!

最佳答案

那时它仍然为null,因为Gin(以及Guice和其他类似框架)无法分配字段,直到构造函数完成运行。

考虑一下如果您手动连接代码会如何(请记住,Gin / Guice将作弊以分配私有字段,调用不可见的方法):

MyObject obj = new MyObject();//initializeWidgets() runs, too early!
obj.xxServiceAsync = GWT.create(xxService.class);

如果您需要构造函数中的某些内容,请将其传递给构造函数。如果您不需要立即使用它(例如直到调用asWidget()为止),那么使用@Inject注释的字段或设置器将很有帮助。

09-26 12:34