我正在通过泽西岛使用HK2,我希望让@Immediate服务正常运作。在这个过程中,我注意到(似乎)我的服务的注释都没有注册。例如,在启动我的ServiceLocator并查看我的描述符以获取使用@Singleton注释的服务后,它仍然设置为@PerLookup。我启动应用程序处理程序的代码如下:
ApplicationHandler handler = new ApplicationHandler(resourceConfig, new AbstractBinder() { ... });
我的活页夹注册了这样的服务:
bindAsContract(ShouldHaveSingletonScope.class);
在此之后立即查看我的ServiceLocator,我发现范围没有从类中拉出(仍然是@PerLookup)。我需要指定一些额外的东西来告诉HK2解析类注释吗?这似乎是一个非常标准的用例,所以我必须遗漏一些东西。
答案 0 :(得分:3)
ServiceLocatorUtilities上有一个名为addClasses
的方法因此,可以访问ServiceLocator并执行
ServiceLocatorUtilities.addClasses(locator, ShouldHaveSingletonScope.class);
绑定器非常直观,并且只会执行您所说的而不是直接查看类。
答案 1 :(得分:1)
这应该有效:
bindAsContract(ShouldHaveSingletonScope.class).in(Singleton.class);
您可以使用Binder
手动配置定位器-OR -
使用hk2注释,运行hk2-inhabitants-generator
(请参阅hk2 doc),这将生成META-INF/hk2-locator/default
文件,然后您需要创建自己的ComponentProvider
(请参阅jersey doc })从中填充服务定位器。