今天在做項目的過程中想在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 ,再從容器中獲取實例即可