filter中@Autowired为null原因是
filter在servlet容器初始化之前,导致我们filter中无法使用依赖注入
public class AccessFilter implements Filter {
@Autowired
private RedisUtils redisUtils;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//解决filter无法依赖注入的问题
ServletContext sc = filterConfig.getServletContext();
WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(sc);
if (cxt != null && cxt.getBean("redisUtils") != null && redisUtils == null){
redisUtils = (RedisUtils) cxt.getBean("redisUtils");
}
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);
}
}
原理从运行上下文去寻找实例,实现注入