我一直在尝试向合约中注入(inject)服务:
@org.jvnet.hk2.annotations.Contract
public interface CategoryDAO{
}
@org.jvnet.hk2.annotations.Service
public class HibernateCategoryDAO implements CategoryDAO
}
@org.jvnet.hk2.annotations.Service
public class MyCategoryManager implements CategoryManager {
@javax.inject.Inject
CategoryDAO categoryDAO;
}
但是 categoryDAO 是空的。
我什至尝试绑定(bind)它:
public class ServiceBinder implements Binder {
@Override
public void bind(DynamicConfiguration config) {
config.bind(BuilderHelper.link(HibernateCategoryDAO.class).to(CategoryDAO.class).build());
}
}
但它仍然保持为空。
我用这样的反射框架初始化 MyCategoryManager
:
Set<?> managers = Reflections.getSubTypesOf(CategoryManager.class);
最佳答案
如果您创建自己的对象但仍希望它注入(inject) hk2,您可以使用 ServiceLocator.inject方法。在您的情况下,描述符 HibernateCategoryDAO 必须已经在 ServiceLocator 中(可能使用 ServiceLocatorUtilities.addClass )。请注意,您自己创建的实例不会被 HK2 管理或跟踪,因此它们无法注入(inject)其他对象。当然,您可以使用 ServiceLocatorUtilities.addOneConstant 添加您自己创建的对象。如果您确实希望将其注入(inject)其他对象。
希望对您有所帮助。
关于java - 当未通过 hk2 创建 bean 时,@inject 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047781/