HK2 / Jersey 不注入非资源类

gor*_*tde 4 java jersey hk2

我正在使用 jersey 在不同位置注入 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);
            ...
        }
    });
Run Code Online (Sandbox Code Playgroud)

福工厂:

public class FooFactory implements Factory<Foo> {
    @Override
    public Foo provide() {
        return Foo.newInstance();
    }
}
Run Code Online (Sandbox Code Playgroud)

注入资源的工作原理:

@Path("/myresource")
public class MyResource{
     @Inject
     protected Bar instance;
}
Run Code Online (Sandbox Code Playgroud)

public class Foo {
     @Inject
     protected Bar instance;
}
Run Code Online (Sandbox Code Playgroud)

才不是。Foo.instance一片空白。为什么?以及如何让它发挥作用?

sis*_*hus 5

您的工厂正在创建 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);
    }
}
Run Code Online (Sandbox Code Playgroud)