在HK2中,用于配置注入(inject)的基本示例代码是这个(在扩展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());

这将导致HK2在需要创建FooImpl()时调用构造函数FooInterface

如果FooImpl没有构造函数怎么办?
  • 如果要使用静态工厂方法实例化FooImpl.getInstance()
  • 怎么办
  • 如果打算由工厂对象实例化怎么办fooFactory.create()

  • 我看到ResourceConfig有一个bind(FactoryDescriptors factoryDescriptors)方法,但是对我来说,尚不清楚构建FactoryDescriptors对象的惯用语是什么,并且还不能在线找到任何示例。

    最佳答案

    尽管我仍然看不到使用BuilderHelper EDSL的方法(对于常见情况来说,这似乎也太过分了),但可以使用以下方法:

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

    这就要求FooFactoryFactory<FooInterface>的实现,因此您需要在现有工厂周围建立立面。我在需要它的时候作为私有(private)内部类来做。
     private static class FooFactory implements Factory<FooInterface> {
    
        @Override
        public void dispose(FooInterface foo) {
          // meh
        }
    
        @Override
        public FooInterface provide() {
          return SomeFactory.getInstance();
        }
     }
    

    09-11 17:09