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