为了在启动时初始化应用程序,我扩展了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
}
}
我尝试通过简单地添加StartupManager
注释将ServletContextListener
注入@Inject
:
@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
?优选构造剂注入,但现场注入也可以。
答案 0 :(得分:3)
它不起作用,因为servlet监听器和Jersey没有链接到同一个系统。作为替代方案,您可以使用泽西岛的Event Listeners。您可以实现cell.contentView.backgroundColor = UIColor(red: 237/255.0, green: 237/255.0, blue: 237/255.0, alpha: 1)
,您可以在其中初始化和清理,就像在servlet侦听器中一样。您可以将您的服务注入泽西的听众。