问题描述
我们曾经有一些代码可以在我们的 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();