【问题标题】:Difference between bindAsContract and bind in HK2HK2 中 bindAsContract 和 bind 的区别
【发布时间】:2019-05-22 17:40:06
【问题描述】:

我正在努力在 J2EE jersey 项目中实现构造函数的依赖注入。我用的是HK2。我创建一个类

class MyServiceImpl implements MyService{
  @Inject
  public MyServiceImpl(String test){
   // do something
  }
}

现在,我的问题是,当我通过扩展 AbstractBinder 在dependencybinder 类中注册此依赖注入时,将依赖绑定为简单的“bind”与“bindAsContract”有什么区别?

【问题讨论】:

    标签: dependencies bind inject hk2


    【解决方案1】:

    当你使用

    bind(ServiceImpl.class).to(IService.class)
    

    ServiceImpl 是实现类,IService 是您宣传为注入类型的合约。所以你会使用

    @Inject
    private IService service;
    

    bindAsContract(ServiceImpl.class)
    

    您是说ServiceImpl 既是实现类又是要宣传的合同。所以你需要这样注入它。

    @Inject
    private ServiceImpl service;
    

    【讨论】:

    • 如果我有两个类实现相同的IService接口:(1)FileServiceImpl,(2)Databaseserviceimpl,那么我们如何根据需要通过接口注入适当的类?我们是否必须使用任何限定符或类似的东西?
    • 是的,你可以使用qualifiedBy(annotationInstance)
    • 在这种情况下我应该如何处理构造函数参数?
    • 你也需要绑定这些。如果你在你的帖子中,因为它是一个字符串,你需要限定它。
    猜你喜欢
    • 2020-08-10
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多