HK2注释未被处理

我正在通过泽西岛使用HK2,我希望得到@Immediate服务。 在这个过程中,我注意到(似乎)我的服务的所有注释都没有注册。 例如,在启动我的ServiceLocator并查看我的描述符以获取使用@Singleton注释的服务之后,它仍然设置为@PerLookup。 我的启动应用程序处理程序的代码如下:

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

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

 bindAsContract(ShouldHaveSingletonScope.class); 

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

ServiceLocatorUtilities上有一个名为addClasses的方法

因此,只需访问ServiceLocator即可

 ServiceLocatorUtilities.addClasses(locator, ShouldHaveSingletonScope.class); 

绑定器非常直观,并且只会执行您所说的而不是直接查看类。

这应该工作:

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

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

-要么-

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