5

在 HK2 中,配置注入的基本示例代码是这样的(在扩展的类中AbstractBinder

bind(BuilderHelper
    .link(FooImpl.class)    // the class of the object to be injected
    .to(FooInterface.class) // identifies what @Inject fields to link to
    .build());

这会导致 HK2FooImpl()在需要创建FooInterface.

如果 FooImpl 没有构造函数怎么办?

  • 如果打算用静态工厂方法实例化怎么办FooImpl.getInstance()
  • 如果它打算由工厂对象实例化怎么办fooFactory.create()

我看到ResourceConfig有一个方法bind(FactoryDescriptors factoryDescriptors),但我不清楚构建FactoryDescriptors对象的习语是什么,并且无法在网上找到任何示例。

4

2 回答 2

8

虽然我仍然看不到使用 BuilderHelper EDSL 的方法(看起来这对于常见情况来说也有点过分),但以下工作:

  bindFactory(FooFactory.class)
       .to(FooInterface.class);

这需要它FooFactory是 的实现Factory<FooInterface>,因此您需要在您拥有的任何现有工厂周围有一个外观。我将它作为我需要的私有内部类来完成。

 private static class FooFactory implements Factory<FooInterface> {

    @Override
    public void dispose(FooInterface foo) {
      // meh
    }

    @Override
    public FooInterface provide() {
      return SomeFactory.getInstance();
    }
 }
于 2013-11-21T17:51:26.843 回答
4

目前 hk2 仅支持 Factory 接口用于创建具有特殊构造函数需求的对象。我们一直在考虑添加一个静态方法构造函数或做某种 CDI @Produces 类型的机制。很难决定哪些事情值得额外的复杂性(我们非常努力地保持轻量级)。

我认为在您上面的代码示例中,您的私有静态类需要实现工厂接口,对吗?

于 2013-12-05T04:15:57.907 回答