使用GIN在GWT中注入入口点类
我试过做这样的事情:
@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; } ......... }
结果对所有实例都为null ..我希望这种方式有效……
我知道我可以做这样的事情
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:除非您将其注入另一个类(并且您必须求助于将其绑定到GWT创建的实例,而不是让GIN创建自己的实例) ,你的应用程序中只有一个EntryPoint实例。
GIN取决于GWT,因此GIN知道GWT,但GWT不知道GIN。
因此,通过GWT.create(AAA.class)
初始化类将以正常的GWT方式初始化AAA,而不使用GIN,这意味着没有dependency injection。
要进行dependency injection,您需要使用注入器通过GIN初始化类(如上所述)。