如何让我的Jersey 2端点在启动时急切地初始化?
我正在从Jersey 1.x移植一些代码,我的各种运行状况检查端点的实现依赖于在启动时初始化的所有@Singleton
端点资源,以便能够检测要执行的检查。
在Jersey 2.0中 – 无论我做什么,我似乎无法让我的资源端点在启动时初始化,并且它们仅在第一次访问每个端点时被构造+初始化。
我想我可以在Application
类中自己初始化它们,但我宁愿使用包扫描!
有没有人知道是否有一些配置选项会告诉Jersey 2急切地初始化它在包扫描期间找到的所有资源端点?
还是一些HK2注释或技巧?
“或者某些HK2注释或技巧?”
您可以使用HK2的即时范围 。 只需使用@Immediate
注释资源类(其作用类似于@Immediate
,因此您可以摆脱它),然后在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"); } }
UPDATE
基于此相关问题 ,如果您需要显式实例化ResourceConfig
(如链接问题的情况),您可以创建一个Feature
并注册该function, 如此答案中所示
更新2
请参阅相关问题
更新3
看起来先前链接到的立即范围内存泄漏问题已在版本2.22.1中得到解决