2016-02-01 89 views
3

我正在使用球衣在各個位置注入POJO。下面是我的配置:HK2 /澤西島不注入非資源類

register(new AbstractBinder() { 
     @Override 
     protected void configure() { 
      bind(Bar.class).to(Bar.class).in(Singleton.class); 
      bindFactory(FooFactory.class).to(Foo.class).in(Singleton.class); 
      ... 
     } 
    }); 

FooFactory:

public class FooFactory implements Factory<Foo> { 
    @Override 
    public Foo provide() { 
     return Foo.newInstance(); 
    } 
} 

注入資源工作:

@Path("/myresource") 
public class MyResource{ 
    @Inject 
    protected Bar instance; 
} 

public class Foo { 
    @Inject 
    protected Bar instance; 
} 

沒有。 Foo.instance爲空。爲什麼?以及如何使其工作?

回答

4

您的工廠正在創建Foo,因此DI框架不會再嘗試更多注射。你需要讓DI框架創建Foo的實例或者自己在FooFactory中處理注入。

你FooFactory可能,例如,有一個酒吧現場,它用來初始化符與...

public class FooFactory implements Factory<Foo> { 
    private final Bar theBar; 

    @Inject 
    public FooFactory(Bar bar) { 
     theBar = bar; 
    } 

    @Override 
    public Foo provide() { 
     return Foo.newInstance(bar); 
    } 
} 
+0

或者,你可以注入'ServiceLocator'到'FooFactory',並注入了' Foo'你自己的例子。 'locator.inject(fooInstance);' –

+0

非常感謝!但是如何知道?我在HK2網站上沒有發現任何有關這方面的文件。有沒有? – gorootde

+0

另請參見[注入不適用於嵌套對象](http://stackoverflow.com/q/34599145/2587435) –