HK2 / Jersey 不注入非资源 class

HK2 / Jersey does not Inject into non Resource class

我正在使用球衣在不同位置注入 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 为空。为什么?以及如何让它发挥作用?

您的工厂正在创建 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);
    }
}