簡體   English   中英

當bean不是通過hk2創建的時,@ inject不起作用

[英]@inject doesn't work when the bean is not created via hk2

我一直在嘗試為合同注入服務:

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

但它仍然是空的。

我使用Reflections框架初始化MyCategoryManager ,如下所示:

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

如果您創建自己的對象但仍希望它注入hk2,則可以使用ServiceLocator.inject方法。 在您的情況下,描述符HibernateCategoryDAO必須已經在ServiceLocator中(可能使用ServiceLocatorUtilities.addClass )。 請注意,您自己創建的實例不會被HK2管理或跟蹤,因此無法將其注入其他對象。 當然,如果您希望將其注入其他對象,可以使用ServiceLocatorUtilities.addOneConstant自行添加自己創建的對象。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM