gpt4 book ai didi

dependency-injection - 在 Jersey 中使用 HK2 将依赖项注入(inject) ServletContextListener

转载 作者:行者123 更新时间:2023-12-03 16:15:04 24 4
gpt4 key购买 nike

为了在启动时初始化应用程序,我扩展了 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 委托(delegate)给该类:
public class StartupManager {

public void performStartup() {
... initialization code here
}
}

我尝试注入(inject) 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 ) 时引用为空叫做。

然后我想我可能必须注册一个活页夹:
@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);
}
}

这也不起作用。

我的问题是如何将依赖项注入(inject) ServletContextListener ?最好是构造函数注入(inject),但字段注入(inject)也可以。

最佳答案

它不起作用,因为 servlet 监听器和 Jersey 没有链接到同一个系统。作为替代方案,您可以使用 Jersey 的 Event Listeners .您可以实现 ApplicationEventListener您可以像在 servlet 监听器中一样进行初始化和清理。您将能够将您的服务注入(inject)到 Jersey 的监听器中。

关于dependency-injection - 在 Jersey 中使用 HK2 将依赖项注入(inject) ServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44690898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com