阿昌教你解决Filter过滤器@Autowired注入调用为null的问题
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿昌教你解决Filter过滤器@Autowired注入调用为null的问题相关的知识,希望对你有一定的参考价值。
阿昌在开发需求时,配置过滤器Filter的时候,使用到自己注入的Service类,但是会出现爆空指针的异常
记录自己的问题如下:
那肯定盲猜就是注入顺序的问题了,经过查阅:web应用启动的顺序是:listener->filter->servlet
那就会发现我们自动注入的Service,此时还没有轮到他,但是在过滤器filter中已经使用了他;所以就爆了空指针;
那阿昌这里提供一种解决方案:使用filter中的init()
方法来在filter的生命周期中我们手动注入需要使用的Service;
@Component
@Slf4j
public class CusomerFilter implements Filter {
private XxxxSerice xxxxSerice;
//使用filter中的init()方法来在filter的生命周期中我们手动注入需要使用的Service;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
ServletContext context = filterConfig.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
xxxxSerice= ctx.getBean(XxxxSericeImpl.class);//你要注入的服务
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//xxxxx
filterChain.doFilter(servletRequest,servletResponse);
}
}
这样子就可以手动在filter中注入自己需要的服务了!!!
以上是关于阿昌教你解决Filter过滤器@Autowired注入调用为null的问题的主要内容,如果未能解决你的问题,请参考以下文章
阿昌教你自定义拦截器&自定义参数解析器&自定义包装HttpServletRequest
阿昌教你自定义拦截器&自定义参数解析器&自定义包装HttpServletRequest
阿昌教你解决在SpringBoot同一个对象内,事务方法互调默认失效问题