攔截器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);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM