我一直在尝试为合同注入服务:
@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为空。
我甚至尝试绑定它:
public class ServiceBinder implements Binder {
@Override
public void bind(DynamicConfiguration config) {
config.bind(BuilderHelper.link(HibernateCategoryDAO.class).to(CategoryDAO.class).build());
}
}
但它仍然保持无效。
我使用这样的Reflection框架初始化MyCategoryManager
:
Set<?> managers = Reflections.getSubTypesOf(CategoryManager.class);
答案 0 :(得分:2)
如果您创建自己的对象但仍希望使用hk2注入,则可以使用ServiceLocator.inject方法。在您的情况下,描述符HibernateCategoryDAO必须已经在ServiceLocator中(可能使用ServiceLocatorUtilities.addClass)。请注意,您自己创建的实例不会被HK2管理或跟踪,因此无法将其注入其他对象。当然,如果您希望将其注入其他对象,可以使用ServiceLocatorUtilities.addOneConstant自行添加自己创建的对象。
希望有所帮助。