Java 在自定义类中使用Guice?
我正在使用一个支持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
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;
}
使我走上正轨的有用且相关的网页:
这篇文章谈到了辅助注射,但它提供了足够的信息和一个简单易懂的例子,说明下一步非常简单。阅读(真的很好)怎么样?我试过了,但不理解它-不是如何理解该页面(或文档中的任何其他页面)适用于我问题中描述的情况。但谢谢你确保没有其他人会在一开始就否决我的问题。