未处理 HK2 注释



我正在通过泽西岛使用 HK2,并希望@Immediate服务正常工作。 在此过程中,我注意到(似乎)我的服务的任何注释都没有注册。 例如,在启动我的服务定位器并查看用@Singleton注释的服务的描述符后,它仍然设置为@PerLookup。 我用于启动应用程序处理程序的代码如下:

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

我的活页夹注册的服务如下所示:

bindAsContract(ShouldHaveSingletonScope.class);

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

ServiceLocatorUtilities 上有一个名为 addClasses 的方法

因此,可以访问服务定位器并执行

ServiceLocatorUtilities.addClasses(locator, ShouldHaveSingletonScope.class);

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

这应该有效:

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

您可以使用活页夹手动配置定位器

-或-

使用 HK2

注释,运行将生成META-INF/hk2-locator/default文件的hk2-inhabitants-generator(请参阅 HK2 文档),然后您需要创建自己的ComponentProvider(请参阅泽西岛文档)以从中填充服务定位器。

最新更新