springboot拦截器无法用@Autowired自动注入bean。
public class Interceptor implements HandlerInterceptor{
@Autowired
private NavService navService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
List<Navbar> navList = navService.getNavList();
request.getSession().setAttribute("navList",navList);
System.out.println("拦截器");
return true;
}
}
就是这个拦截器中navService无法注入,运行时报空。再网上查找最多就是再继承了 “WebMvcConfigurerAdapter” 的类中添加这个拦截器作为一个bean,但是试了没有用。然后我在该类中用@Autowired来注入navService,结果发现在这里可以注入。
@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
//这里可以注入
@Autowired
private NavService navService;
@Override
public void addInterceptors(InterceptorRegistry registry) {
List list = new ArrayList();
list.add("/*");
registry.addInterceptor(new Interceptor(navService)).addPathPatterns(list);
}
}
这里的navService是可以注入的。然后我就利用构造注入来给拦截器中的navService注入bean。
public class Interceptor implements HandlerInterceptor{
@Autowired
private NavService navService;
//构造方法注入
public Interceptor(NavService navService){
this.navService = navService;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
List<Navbar> navList = navService.getNavList();
request.getSession().setAttribute("navList",navList);
System.out.println("拦截器");
return true;
}
}