【问题标题】:Inject entry point class in GWT with GIN使用 GIN 在 GWT 中注入入口点类
【发布时间】:2011-09-23 15:07:33
【问题描述】:

我尝试过这样做:

@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..

为什么我尝试的第一种方法对我不起作用? 有什么建议吗?

谢谢

【问题讨论】:

    标签: java gwt dependency-injection gwt-gin


    【解决方案1】:

    您可以使用 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 注释您的入口点:除非您将其注入另一个类(并且您必须求助于黑客将其绑定到由 GWT 创建的实例,并且没有 GIN创建自己的),您的应用中将只有一个 EntryPoint 实例。

    【讨论】:

      【解决方案2】:

      GIN 依赖于 GWT,所以 GIN 知道 GWT,但 GWT 不知道 GIN。

      因此,通过GWT.create(AAA.class) 初始化您的类将以普通 GWT 方式初始化 AAA,没有 GIN,这意味着没有依赖注入。

      要进行依赖注入,您需要使用注入器(如上所述)通过 GIN 初始化您的类。

      【讨论】:

        猜你喜欢
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多