全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
封面图上传 :
+
点击上传图片
代码如下: 在拦截器里面注入一个CatalogService catalogService,调试发现是null ``` package top.bowen.interceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import top.bowen.pojo.Catalogs; import top.bowen.service.CatalogService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; @Component public class GlobalParamsInterceptor implements HandlerInterceptor { @Autowired CatalogService catalogService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { /** * 全局添加分类信息 */ HashMap
catalogsHashMap = catalogService.catalogsHashMapList(); request.setAttribute("catalogsHashMap",catalogsHashMap); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } } ``` #### 原因: 后面查资料发现 造成null的原因是因为拦截器加载是在springcontext创建之前完成的,所以在拦截器中注入实体自然就为null。 一般都是因为除了在拦截器之外,还需要在拦截器的配置类中,注册拦截器时没有使用spring的bean,而是使用了new创建bean造成的。 #### 解决 解决方法就是让bean提前加载,将配置信息修改为如下: 不通过new 的方式创建GlobalParamsInterceptor而是自动注入,这样他就成了Spring的一个bean 关键代码: **@Autowired private GlobalParamsInterceptor globalParamsInterceptor;** ``` package top.bowen.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import top.bowen.interceptor.GlobalParamsInterceptor; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private GlobalParamsInterceptor globalParamsInterceptor; ** @Override public void addInterceptors(InterceptorRegistry registry) { /** * 拦截器按照顺序执行 */ /** * 不需要登录拦截的url */ final String[] notLoginInterceptPaths = {"/static/**", "/error"}; registry.addInterceptor(globalParamsInterceptor).addPathPatterns("/**") .excludePathPatterns(notLoginInterceptPaths); } } ```
保存文章