Jersey 初始化功能:在 Application 对象或 ServletContextListner 中

Jersey Initialization Functionality: In Application object or in ServletContextListner

我有一个使用 Servlet 3.0 的 Jersey 应用程序。我在 servlet 初始化时使用了 javax.ws.rs.Application。

public class MyApplication extends ResourceConfig {....}

我有一些逻辑应该 运行 在 servlet 初始化时。我可以将此逻辑放在 MyApplication 的构造函数中,或者我可以定义一个 ServletContextListner。

public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // Do stuff during server startup.
    }

    ...}

正确的做法是什么?

从 Jersey 文档来看,这似乎不是 Application 对象的预期用例。

JAX-RS provides a deployment agnostic abstract class Application for declaring root resource and provider classes, and root resource and provider singleton instances. A Web service may extend this class to declare root resource and provider classes.

MyApplication 的构造函数中的任何逻辑只会在收到第一个请求时执行。

如果您需要在 servlet 初始化时 运行 的逻辑,那么您应该使用 ServletContextListner。