3

我正在从 Jersey 1.x 移植一些代码,并且我对各种健康检查端点的实现依赖于@Singleton在启动时初始化的所有端点资源,以便能够检测要执行哪些检查。

在 Jersey 2.0 中-无论我做什么,我似乎都无法让我的资源端点在启动时初始化,并且它们仅在第一次访问每个端点时才被构造+初始化。

我想我可以在Application课堂上自己初始化它们,但我宁愿使用包扫描!

有没有人知道是否有一些配置选项会告诉 Jersey 2 急切地初始化它在包扫描期间找到的所有资源端点?

还是一些 HK2 注释或技巧?

4

1 回答 1

9

“还是一些 HK2 注释或技巧?”

您可以使用 HK2 的即时作用域。只需使用@Immediate(其行为类似于@Singleton,因此您可以摆脱它)注释资源类,然后在ServiceLocator. 一个例子:

import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
...

@ApplicationPath("/rest")
public class JerseyApplication extends ResourceConfig {

    @Inject
    public JerseyApplication(ServiceLocator locator) {
        ServiceLocatorUtilities.enableImmediateScope(locator);
        packages("thepackages.to.scan");
    }
}

更新

基于此相关问题,如果您需要显式实例化ResourceConfig,如链接问题的情况,您可以创建一个Feature并注册该功能,如本答案所示

更新 2

请查看相关问题

更新 3

看起来先前链接到的即时范围内存泄漏问题已在版本 2.22.1 中得到解决

于 2015-01-24T08:25:06.623 回答