我需要使用工厂才能在 Jersey 中注入一个简单的对象吗?

Do I need to use a factory in order to inject a simple object in Jersey?

从现在开始,为了将 Foo 类型的对象注入 Bar,我执行以下操作。

Class 注入:

class Bar {
    @Inject
    Foo field;

    public Foo getField() { return field; }
}

代码实现工厂:

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

    @Override
    public void dispose(Foo f) {
    }
}

主要配置中的代码:

final ResourceConfig rc = new ResourceConfig()
                .packages("com.example")
                .register(
                        new AbstractBinder() {
                            @Override
                            protected void configure() {
                                bindFactory(new FooFactory()).to(Foo.class).in(Singleton.class);
                            }
                        })

我的问题是...在使用 hk2 进行依赖注入的 Jersey 2.0 中,是否可以在不创建工厂的情况下注入对象 class?

可以使用 AbstractBinder 进行注入绑定,而无需 FactoryInjectionResolver

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

在这种情况下,类 Foo 和 Bar 的构造函数为空。

public class Bar {
    @Inject
    Foo field;
    public Foo getField() { return field; }
}

public class Foo {}

现在您可以将 Bar 注入资源或其他 hk2 bean。