HK2 / Jersey不会注入非资源类

时间:2016-02-01 09:26:58

标签: java jersey hk2

我正在使用运动衫在各个地方注射POJO。这是我的配置:

 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为空。为什么?以及如何使其发挥作用?

1 个答案:

答案 0 :(得分:4)

您的工厂正在创建Foo,因此DI框架不会再尝试注射。您需要让DI框架创建Foo实例或在FooFactory中自己处理注入。

例如,您的FooFactory可以有一个Bar字段,用于初始化Foo ...

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);
    }
}