阿昌教你解决Filter过滤器@Autowired注入调用为null的问题
阿昌 Java小菜鸡
阿昌在开发需求时,配置过滤器Filter的时候,使用到自己注入的Service类,但是会出现爆空指针的异常 记录自己的问题如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/4995354084244e4fb53258497ba0b685.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zi_5piM5Zac5qyi5ZCD6buE5qGD,size_14,color_FFFFFF,t_70,g_se,x_16) 那肯定盲猜就是注入顺序的问题了,经过查阅:==web应用启动的顺序是:listener->filter->servlet== 那就会发现我们自动注入的Service,此时还没有轮到他,但是在过滤器filter中已经使用了他;所以就爆了空指针;

那阿昌这里提供一种解决方案:使用filter中的init()方法来在filter的生命周期中我们手动注入需要使用的Service;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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中注入自己需要的服务了!!!

 请作者喝咖啡