在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());
这会导致HK2在需要创建FooImpl()
时调用构造函数FooInterface
。
如果FooImpl没有构造函数怎么办?
FooImpl.getInstance()
fooFactory.create()
我看到ResourceConfig
有一个方法bind(FactoryDescriptors factoryDescriptors)
,但我不清楚构建FactoryDescriptors
对象的成语是什么,并且无法在线找到任何示例。
答案 0 :(得分:5)
虽然我仍然看不到使用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();
}
}
答案 1 :(得分:2)
目前,hk2仅支持Factory接口,用于创建具有特殊构造函数需求的对象。我们一直在考虑添加静态方法构造函数或执行某种类型的CDI @Produces类型的机制。很难确定哪些东西值得额外的复杂性(我们非常努力保持轻量级)。
我认为在上面的代码示例中,您的私有静态类需要实现Factory接口,对吧?