在如何在Filter 中注入

今天在做項目的過程中想在filter中注入RedisTemplate,發現使用@Autowired註解報java.lang.NullPointerException。
這是因爲filter和springmvc共存在web容器中,filter的初始化和spring容器是摩雲關係的,所以會 注入失敗。
那麼如何在filter中注入RedisTemplate呢?實例如下

public class SessionFilter implements Filter {

    // 聲明一個redisTemplate
    RedisTemplate redisTemplate;

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {

        // 獲取容器
        HttpServletRequest req = (HttpServletRequest) request;
        ServletContext sc = req.getSession().getServletContext();
        XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);

        // 從容器中獲取redisTemplate
        if(cxt != null && cxt.getBean("redisTemplate") != null && redisTemplate == null)
            redisTemplate = (RedisTemplate) cxt.getBean("redisTemplate");

        Object user = redisTemplate.opsForValue().get("sessionId");

    }
  @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
}

先在代碼中獲取到XmlWebApplicationContext ,再從容器中獲取實例即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章