为了在启动时初始化应用程序,我扩展了ServletContextListener
@WebListener
public class MyServletContextListener implements javax.servlet.ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
... initialization code here
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}现在,我想将初始化逻辑提取到一个独立的StartupManager类中,并从MyServletContextListener委托给这个类
public class StartupManager {
public void performStartup() {
... initialization code here
}
}我试图通过简单地添加@Inject注释将StartupManager注入到ServletContextListener中:
@WebListener
public class MyServletContextListener implements javax.servlet.ServletContextListener {
@Inject StartupManager mStartupManager;
@Override
public void contextInitialized(ServletContextEvent sce) {
mStartupManager.performStartup();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}这不起作用-调用contextInitialized(ServletContextEvent )时引用为null。
然后我想我可能需要注册一个活页夹:
@ApplicationPath("")
public class MyResourceConfig extends ResourceConfig {
public MyResourceConfig() {
register(new DependencyInjectionBinder());
}
}
public class DependencyInjectionBinder extends AbstractBinder {
@Override
protected void configure() {
bind(StartupManager.class).to(StartupManager.class);
}
}这也不起作用。
我的问题是如何将依赖注入到ServletContextListener中?最好是构造函数注入,但是字段注入也是可以的。
发布于 2017-06-22 15:51:32
这是行不通的,因为servlet侦听器和Jersey没有链接到同一个系统。作为另一种选择,你可以使用泽西的Event Listeners。您可以实现一个ApplicationEventListener,在其中您可以像在servlet侦听器中一样进行初始化和清理。您将能够将您的服务注入Jersey的listener。
https://stackoverflow.com/questions/44690898
复制相似问题