Spring 注入在 Je​​rsey 过滤器中不起作用 - @InjectParam 在 jersey2 中等效

Spring Injection isn't working in Jersey Filter - @InjectParam Equivalent in jersey2

我正在尝试使用 spring 注入在 Je​​rsey-Filter 中注入一个对象。

如果我尝试 @Inject 方法,那么我将以异常结束

SEVERE: StandardWrapper.Throwable
MultiException stack 1 of 2
java.lang.IllegalStateException: Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope
        at org.jvnet.hk2.internal.ServiceLocatorImpl._resolveContext(ServiceLocatorImpl.java:2058)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.access[=11=]0(ServiceLocatorImpl.java:120)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.compute(ServiceLocatorImpl.java:186)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.compute(ServiceLocatorImpl.java:182)

如果我尝试使用它在 Jersey 1.x 中定义的 @InjectParam 但是我使用的是 Jersey 2.17,其中找不到此注释。

知道如何在 jersey-filter 中执行此 spring 注入吗?

异常是什么意思?

Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope

更新编辑: 此外,您可以提供构造函数注入。 Jersey 的构造函数注入在 Filter 中对我有用,而不是 Field Injections

旧:

我通过在过滤器中注入 javax.servlet.ServletContext 并使用它来使用 WebApplicationContextUtils[= 获取 beanId 来实现这一点12=]

public class LoginFilter implements ContainerRequestFilter {

    @Context private HttpServletRequest servletRequest;

    @Context private HttpServletResponse servletResponse;

    @Context private ServletContext servletContext;

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        try {

            WebApplicationContext springContext = 
                    WebApplicationContextUtils.getWebApplicationContext(servletContext);

            CookieAuthenticator     cookieAuthenticator = springContext.getBean(CookieAuthenticator.class);

            LoginInterceptorHelper  loginInterceptorHelper = springContext.getBean(LoginInterceptorHelper.class);

            HttpSession session = request.getSession(true);

            UserSummary user = (UserSummary) session.getAttribute(WebConstants.USER_DETAIL);

并且通过包含 spring 侦听器,因此 spring 初始化首先发生。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

这行得通。 但是我不是注入而是显式加载依赖项。 有没有更好的方法来做到这一点?