3

我一直在尝试向合同注入服务:

@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());
    }
}

但它仍然为空。

我像这样初始化MyCategoryManagerwith Reflections 框架:

Set<?> managers = Reflections.getSubTypesOf(CategoryManager.class);
4

1 回答 1

2

如果您创建自己的对象但仍希望将其注入 hk2,您可以使用ServiceLocator.inject方法。在您的情况下,描述符 HibernateCategoryDAO 必须已经在 ServiceLocator 中(可能使用ServiceLocatorUtilities.addClass)。请注意,您自己创建的实例不会被 HK2 管理或跟踪,因此它们无法注入其他对象。当然,如果您确实希望将其注入其他对象,则可以使用ServiceLocatorUtilities.addOneConstant添加您自己创建的对象。

希望有帮助。

于 2014-03-02T20:24:19.357 回答