我试过这样做:
@Singleton
public class AAA implements EntryPoint, HistoryListener
{
private BBB bbb;
private CCC ccc;
private DDD ddd;
private EEE eee;
@Inject
public AAA(BBB bbb, CCC ccc, DDD ddd, EEE eee)
{
this.bbb = bbb;
this.ccc = ccc;
this.ddd = ddd;
this.eee = ee;
}
.........
}
结果对所有实例都是空的.. 我希望这种方式可以工作...
例如我知道我可以做这样的事情
private final MyGinjector injector = GWT.create(MyGinjector.class);
injector.getAAA()
and so on..
为什么我试过的第一种方法对我不起作用? 有什么建议吗?
谢谢
最佳答案
您可以使用 Guice 的 injectMembers
功能,这在 GIN 中是通过在您的 Ginjector 中声明一个采用单个参数的方法来完成的。
@GinModules(...)
interface MyGinjector extends Ginjector {
public void injectEntryPoint(AAA entryPoint);
...
}
public class AAA implements EntryPoint {
@Inject private BBB bbb; // field injection works
private CCC ccc;
@Inject void setCcc(CCC ccc) { this.ccc = ccc; } // and of course method injection
public onModuleLoad() {
MyGinjector injector = GWT.create(MyGinjector.class);
injector.injectEntryPoint(this);
...
}
}
顺便说一句,您不需要使用 @Singleton
注释您的 EntryPoint:除非您将它注入(inject)另一个类(并且您必须诉诸黑客将其绑定(bind)到由创建的实例GWT,而不是让 GIN 创建自己的),您的应用程序中将只有一个 EntryPoint 实例。
关于java - 使用 GIN 在 GWT 中注入(inject)入口点类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6495303/