春季注射在泽西过滤器不工作 - @InjectParam等效泽西2
问题描述:
我想注入一个对象在泽西过滤器使用弹簧注射。春季注射在泽西过滤器不工作 - @InjectParam等效泽西2
如果我尝试@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$000(ServiceLocatorImpl.java:120)
at org.jvnet.hk2.internal.ServiceLocatorImpl$2.compute(ServiceLocatorImpl.java:186)
at org.jvnet.hk2.internal.ServiceLocatorImpl$2.compute(ServiceLocatorImpl.java:182)
如果我尝试使用@InjectParam,它在新泽西州1.x中定义的,但是我很使用泽西岛2.17其中没有找到该注释。
任何想法如何在泽西过滤器执行这种弹簧注射?
这个例外是什么意思?
Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope
答
更新编辑: 另外,你可以提供一个构造函数注入。新泽西州的构造函数注入在过滤器的,而不是现场注射
老为我工作:
我实现了这个通过注入javax.servlet.ServletContext在过滤器内使用,使用WebApplicationContextUtils得到beanIds
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);
而且通过包含一个弹簧侦听器,所以弹簧初始化首先发生。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
This works。 但是,而不是注入我明确加载依赖关系。 有没有更好的方法来做到这一点?
它看起来像我在初始时春季桥没有被正确初始化。我不确定泽西岛是如何做到这一点的,但你可以在这里看到更多关于spring/hk2桥梁的信息:https://hk2.java.net/2.5.0-b03/spring-bridge.html – jwells131313