Java 在自定义类中使用Guice?

Java 在自定义类中使用Guice?,java,guice,Java,Guice,我正在使用一个支持Guice的框架 public Class myCustomClass { private String iNeedthis; private Context thisToo; @Inject FrameWorkThing magic; public myCustomClass(String iNeedThis, Context thisToo){ this.iNeedThis = iNeedThis; t

我正在使用一个支持Guice的框架

public Class myCustomClass {

   private String iNeedthis;
   private Context thisToo;

   @Inject
   FrameWorkThing magic;

   public myCustomClass(String iNeedThis, Context thisToo){
         this.iNeedThis = iNeedThis;
         this.thisToo = thisToo;
   }

   public void DoMagic(){
        //null pointer error because magic was not injected
        magic.doMagic(this.iNeedthis);
   }
}
当使用框架创建的类(或覆盖现有绑定的子类)时,我可以非常轻松地实例化框架提供的变量。不管我需要什么,这只是时间的问题

@Inject
FrameworkProvidedType variable;
但是,在我自定义创建的类中,这不起作用。所有注入的变量都为空

我的理解是,为了使用注入,我的类必须有一个绑定

如果我是现有框架类的子类,我可以重写模块类中的绑定。这很简单

但是我有一个新类,我不知道如何将它绑定到底层框架

public Class myCustomClass {

   private String iNeedthis;
   private Context thisToo;

   @Inject
   FrameWorkThing magic;

   public myCustomClass(String iNeedThis, Context thisToo){
         this.iNeedThis = iNeedThis;
         this.thisToo = thisToo;
   }

   public void DoMagic(){
        //null pointer error because magic was not injected
        magic.doMagic(this.iNeedthis);
   }
}
如何启用这个新类

我在运行时模块中尝试了这一点

public Class<myCustomClass> bindMyCustomClass(){
    return MyCustomClass.class;
}
public类bindMyCustomClass(){
返回MyCustomClass.class;
}

结果惨败

不,多亏@bmorris591在门口驳回并否决了这个问题,我找到了答案

@将字段注入类意味着类实例需要由Guice创建

步骤1是为类创建工厂。这可能没有必要,但对我来说很有效

public interface MyCustomClassFactory {
    public MyCustomClass create(String iNeedThis, Context thisToo);
}
第2步是将工厂安装到Guice中

@Override
public void configure(Binder binder) {

    super.configure(binder);

    binder.install(new FactoryModuleBuilder().build(MyCustomClass.class));
}
在我的例子中,我使用的框架提供了一个模块类,它是com.google.inject.Module的一个实现

在该类中有一个“configure(Binder)”函数,该函数在启动时调用

步骤3实际上是注释构造函数

@Inject
public myCustomClass(String iNeedThis, Context thisToo){
     this.iNeedThis = iNeedThis;
     this.thisToo = thisToo;
}
使我走上正轨的有用且相关的网页:


这篇文章谈到了辅助注射,但它提供了足够的信息和一个简单易懂的例子,说明下一步非常简单。

阅读(真的很好)怎么样?我试过了,但不理解它-不是如何理解该页面(或文档中的任何其他页面)适用于我问题中描述的情况。但谢谢你确保没有其他人会在一开始就否决我的问题。