HK2注释未被处理

时间:2014-02-13 02:57:47

标签: java jersey jersey-2.0 hk2

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

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

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

bindAsContract(ShouldHaveSingletonScope.class);

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

2 个答案:

答案 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 })从中填充服务定位器。