原文地址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);