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

但类别DAO为空。

我什至试图绑定它:

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

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

希望有帮助。

最新更新