我是否需要使用工厂才能在泽西岛注入一个简单的物体?

时间:2016-03-23 15:25:32

标签: java dependency-injection jersey hk2

到目前为止,为了将一个Foo类型的对象注入Bar,我执行以下操作。

要注入的类:

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中,无论如何都要注入一个对象而不创建工厂类?

1 个答案:

答案 0 :(得分:1)

可以在没有AbstractBinderFactory的情况下使用InjectionResolver进行注射绑定。

    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。