阿昌教你解决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

filter中@Autowired为null解决办法

阿昌教你解决在SpringBoot同一个对象内,事务方法互调默认失效问题

阿昌教你解决在SpringBoot同一个对象内,事务方法互调默认失效问题

阿昌教你通过docker搭建Redis集群