2

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

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

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

bindAsContract(ShouldHaveSingletonScope.class);

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

4

2 回答 2

3

ServiceLocatorUtilities 上有一个名为addClasses的方法

所以访问 ServiceLocator 就可以了

ServiceLocatorUtilities.addClasses(locator, ShouldHaveSingletonScope.class);

活页夹是非常字面的,只会做你告诉它的事情,而不是直接看课程。

于 2014-02-13T20:39:47.343 回答
1

这应该有效:

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

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

-或者-

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

于 2014-02-13T05:14:29.573 回答