如何让我的Jersey 2端点在启动时急切地初始化?

时间:2015-01-23 16:43:11

标签: java jersey jersey-2.0 hk2

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

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

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

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

或某些HK2注释或技巧?

1 个答案:

答案 0 :(得分:7)

  

“或某些HK2注释或技巧?”

您可以使用HK2的Immediate Scope。只需使用@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");
    }
}

更新

基于this related question,如果您需要显式实例化ResourceConfig,就像链接问题的情况一样,您可以创建Feature并注册该功能,如this answer

更新2

请参阅related issue

更新3

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