首页 > 解决方案 > 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 不再存在。

标签: jettyembedded-jettyjetty-10

解决方案


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();

推荐阅读