java - 当未通过 hk2 创建 bean 时,@inject 不起作用

标签 java dependency-injection 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;

}

但是 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/

相关文章:

java - 如何在 Java 中的自定义异常中设置我自己的消息,可以在不使用构造函数的情况下检索我的 getMessage(),有什么办法吗?

design-patterns - 在 Startup.cs 中解析服务是服务定位器模式吗?

dependency-injection - 在代码中进行依赖注入(inject)配置有什么问题?

java - Jersey @BeanParam 和 HK2 ServiceLocatorImpl 之间的内存泄漏

java - 使用 Marklogic java API 进行通配符搜索

java - 用于响应的 JAX-WS 和 SOAP 映射

java - 匿名内部类(相对于非匿名内部类)有哪些优势?

c# - 使用 ASP.NET Core Microsoft.Extensions.DependencyInjection 注册部分封闭的泛型类型

java - Jersey 和 HK2 - 注入(inject)当前用户

java - 具有循环依赖的 HK2 注入(inject)