问题原因
web应用启动的顺序是:listener->filter->servlet ,fliter初始化的时候,bean并没有加载,所以@Autowired没用 wxService是空的
解决办法
未生效的代码
@WebFilter(filterName="wechatFilter",urlPatterns="/index")
public class WeChatFilter implements Filter {
@Autowired
private WxMpService wxService;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("----wechatFilter过滤器初始化----");
}
public void test(
System.out.println("111");
)
}
去掉@webFilter,成功,这里新建了一个类
@Configuration
public class WeChatWbconfig {
@Bean
public Filter weChatFilter(){
return new WeChatFilter();
}
@Bean
public FilterRegistrationBean webTokenFilterRegistration(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(weChatFilter());
registrationBean.addUrlPatterns("/index");
registrationBean.setName("wechatFilter");
// 注意这个order顺序
registrationBean.setOrder(1800);
System.out.println("----wechatFilter过滤器初始化----");
return registrationBean;
}
}
原来的失效代码变更为
public class WeChatFilter implements Filter {
@Autowired
private WxMpService wxService;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("----wechatFilter过滤器初始化----");
}
public void test(
System.out.println("111");
)
}
参考:https://www.yht7.com/news/60365