【问题标题】:HK2 annotations not being handledHK2 注释未处理
【发布时间】:2014-02-13 02:57:46
【问题描述】:

我通过 Jersey 使用 HK2,并希望让 @Immediate 服务正常工作。在此过程中,我注意到(看起来)我的服务的所有注释都没有被注册。例如,在启动我的 ServiceLocator 并查看使用 @Singleton 注释的服务的描述符后,它仍然设置为 @PerLookup。我启动应用程序处理程序的代码如下:

ApplicationHandler handler = new ApplicationHandler(resourceConfig, new AbstractBinder() { ... });

我的活页夹注册了这样的服务:

bindAsContract(ShouldHaveSingletonScope.class);

在此之后立即查看我的 ServiceLocator,我发现范围没有从类中拉出(仍然是 @PerLookup)。是否需要指定其他内容来告诉 HK2 解析类注释?这似乎是一个非常标准的用例,所以我一定遗漏了一些东西。

【问题讨论】:

    标签: java jersey jersey-2.0 hk2


    【解决方案1】:

    ServiceLocatorUtilities 上有一个方法叫addClasses

    所以访问 ServiceLocator 就可以了

    ServiceLocatorUtilities.addClasses(locator, ShouldHaveSingletonScope.class);
    

    活页夹非常直白,只会按照你说的去做,而不是直接看课程。

    【讨论】:

    • 看起来这个方法确实通过 DynamicConfiguration 尊重类注释,而在 Binder 中注册一个类则没有。这似乎非常违反直觉和令人沮丧的限制。特别是考虑到 ApplicationHandler 接受自定义 Binder 作为参数的事实。不过感谢您的回答!
    • 输入一个 Jira 请求绑定方法是个好主意,也许就像您的情况下的活页夹上的“analyze(Class> clazz...)”跨度>
    • 什么是定位器变量?我从哪里初始化它?
    【解决方案2】:

    这应该可行:

    bindAsContract(ShouldHaveSingletonScope.class).in(Singleton.class);
    

    您可以使用 Binder 手动配置定位器

    -或-

    使用 hk2 注释,运行hk2-inhabitants-generator(参见hk2 doc)将生成META-INF/hk2-locator/default 文件,然后您需要创建自己的ComponentProvider(参见jersey doc)来填充服务定位器。

    【讨论】:

    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多