2016-03-02 73 views
3

我想注入一個對象在澤西過濾器使用彈簧注射。春季注射在澤西過濾器不工作 - @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

+0

它看起來像我在初始時春季橋沒有被正確初始化。我不確定澤西島是如何做到這一點的,但你可以在這裏看到更多關於spring/hk2橋樑的信息:https://hk2.java.net/2.5.0-b03/spring-bridge.html – jwells131313

回答

0

更新編輯: 另外,你可以提供一個構造函數注入。新澤西州的構造函數注入在過濾器的,而不是現場注射

老爲我工作:

我實現了這個通過注入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。 但是,而不是注入我明確加載依賴關係。 有沒有更好的方法來做到這一點?