【问题标题】:How do I inject constants with hk2 in jersey 2.0?如何在 jersey 2.0 中使用 hk2 注入常量?
【发布时间】:2014-12-09 11:58:21
【问题描述】:

如何在球衣中使用 HK2 将常量注入某个类?有了 Guice,我可以上一些课,比如

public class DependsOnFoo {

    @Inject
    public DependsOnFoo(@Named("FOO") String foo) {
        ...
    }
    ...
}

我会在注入器中配置它,例如

bind(String.class).named("FOO").toInstance(new String("foo"))

HK2 中的等价物(如果有)是什么?

【问题讨论】:

    标签: java dependency-injection jersey-2.0 hk2


    【解决方案1】:

    我正在学习来自 Guice 的 hk2。老实说,我仍然对 hk2 的复杂性和 guice 的简单性感到困惑。我确实发现这个解决方案对我有用,它与 Guice builder 非常相似。这似乎比必须使用 ServiceLocatorUtilitiesclass 更直接一些。

    public class IOCMockRestModule extends AbstractBinder
        bind(20000).to(Integer.class).named("MAX_REQUEST_TIMEOUT");
    }
    

    并使用注入的值:

    @Inject
    protected CustomerResource(ICustomerProvider customerProvider, @Named("MAX_REQUEST_TIMEOUT") int maxTimeoutMillis) {
    

    【讨论】:

    • 是否有可能以一种更灵活的方式实现这一点,不需要为每个新的命名值(例如MAX_REQUEST_TIMEOUT)创建一个新的bind()?我希望可以在运行时读取命名值并通过自定义实现(例如从属性文件、环境变量等)查看更灵活的东西?
    • 我认为 hk2 没有此功能,但您可以查看 guice 的 com.google.inject.name.Names.bindProperties(Binder binder, Properties properties) 作为创建自己的指南。我认为将这个功能移植到 hk2 应该很简单。
    • 这很有帮助,谢谢@Chris。由于我想坚持使用 HK2 而不是引入其他技术,因此我最终成功地使用了自定义注释和 InjectionResolver 来获得我想要的行为,如此处所述stackoverflow.com/a/41436316/5661065
    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多