Jetty 10 中的 addLifeCycleListener 发生了什么?

问题描述

我们曾经有一些代码可以在我们的 jetty 嵌入式服务器启动时引导 Google Guice。

    // add a lifecycle listener to bootstrap injector on startup
    svr.addLifeCycleListener(new AbstractLifeCycle.AbstractLifeCycleListener() {
        @Override
        public void lifeCycleStarted(LifeCycle event) {
            System.out.println("Bootstrapping Guice injector ...");
            Guice.createInjector(new GreeterServletModule(),new GreeterappModule());
        }
    });

现在,当我们尝试升级到 Jetty 10 时,它说 addLifeCycleListener 不再存在。

解决方法

AbstractLifeCycle.AbstractLifeCycleListener 是一个 EventListener

使用LifeCycle.addEventListener(listener)

顺便说一下,引导 Guice 的正常方法是扩展 com.google.inject.servlet.GuiceServletContextListener 并将您的扩展添加到 ServletContext 侦听器?

这是 Google 推荐的做法,也是 Google 自己在自己的框架(如 Google App Engine)中初始化 Guice 的方式。

来自 Google Cloud Platform Java 示例项目的示例 - EchoGuiceListener.java

package com.mycompany;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;

public class GreeterGuiceListener extends GuiceServletContextListener {
  @Override
  protected Injector getInjector() {
    return Guice.createInjector(new GreeterServletModule(),new GreeterAppModule());
  }
}

与...

ServletContextHandler contextHandler = new ServletContextHandler()
contextHandler.addEventListener(new GreeterGuiceListener());
// ... other init ...
server.start();