拦截器HandlerInterceptor内部也可以注入bean,代码纠正补充
原文地址https://www.jianshu.com/p/890c23a1b3d7
原文内容
1、拦截器内无法通过SpringBean的方式注入LoggerJPA,我只能通过另外一种形式。
private <T> T getDAO(Class<T> clazz,HttpServletRequest request) { BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); return factory.getBean(clazz); }
2、 然后在拦截器内部需要LoggerJPA对象的地方获取就行。
LoggerJPA loggerDAO = getDAO(LoggerJPA.class,request); loggerDAO.save(loggerEntity);
纠正如下:
原配置为
自定义的拦截器内部是可以用spring注入的方式注入bean对象的
1、在拦截器配置中LoggerConfguration 添加bean,同时将new LoggerInterceptor() 改为loggerInterceptor(),此操作是将拦截器注册为bean也交给spring管理,这样拦截器内部注入其他的bean对象也就可以被spring识别了
@Configuration public class LoggerConfguration extends WebMvcConfigurerAdapter { @Bean LoggerInterceptor loggerInterceptor(){ return new LoggerInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loggerInterceptor()).addPathPatterns("/**"); } }
2、拦截器内部调用原来为
LoggerJPA loggerDAO = getDAO(LoggerJPA.class,request); loggerDAO.save(loggerEntity);
该为:运行后成功,不会出现bean未注入,报空指针的情况。
loggerJPA.save(loggerEntity);