有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当bean不是通过hk2创建时,java@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是空的

我甚至试着把它绑起来:

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);

共 (1) 个答案

  1. # 1 楼答案

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

    希望有帮助