首頁  >  文章  >  Java  >  SpringBoot之攔截器注入Bean的方法介紹(程式碼範例)

SpringBoot之攔截器注入Bean的方法介紹(程式碼範例)

不言
不言轉載
2019-02-16 11:59:553227瀏覽

這篇文章帶給大家的內容是關於SpringBoot之攔截器注入Bean的方法介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

由於業務需要,需要在攔截器中操作Redis緩存,按照 controller,service層配置發現無法注入,一直報空指標異常。

解決方案

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
 
    /**
      * 将自定义拦截器作为Bean写入配置
      * @return
      */
     @Bean
     public SysInterceptor sysInterceptor() {
      return new SysInterceptor();
     }
     /**
      * 对拦截器注册
      */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        String[] patterns = new String[] {"/swagger-resources/**"};
        registry.addInterceptor(sysInterceptor())
                                 .addPathPatterns("/**")
                                 .excludePathPatterns(patterns);
        super.addInterceptors(registry);
    }
}

攔截器:

public class SysInterceptor  implements HandlerInterceptor {
    
    private static final Logger logger = LoggerFactory.getLogger(SysInterceptor.class);
    
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    
    @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 {
        
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
            Object handler, Exception ex) throws Exception {
        
    }
}

查詢原因

攔截器執行在Bean初始化之前導致這個問題的。在web.xml中各個元素的執行順序是這樣的,context-param-->listener-->filter-->servlet; 而攔截器是在Spring MVC中配置的,如果從整個專案中看,一個servlet請求的執行過程變成了這樣context-param-->listener-->filter-->servlet-->interceptor,為什麼攔截器是在servlet執行之後,因為攔截器本身就是在servlet內部的。

概念

  • servlet:servlet是一種運行伺服器端的java應用程序,具有獨立於平台和協定的特性,並且可以動態的生成web頁面,它工作在客戶端請求與伺服器回應的中間層。

  • filter:filter是可以重複使用的程式碼片段,可以用來轉換HTTP請求、回應和頭資訊。 Filter不像Servlet,它不能產生一個請求或回應,它只是修改某一資源的請求,或修改從某一的回應。

  • listener:監聽器,從字面上可以看出listener主要用來監聽只用。透過listener可以監聽web伺服器中某一個執行動作,並根據 其要求作出相應的回應。通俗的語言說就是在application,session,request三個物件建立消亡或往其中新增修改刪除屬性時自動執 行程式碼的功能元件。

  • interceptor:攔截器是對過濾器更加細緻的應用,他不僅可以應用在service方法前後還可以應用到其他方法的前後攔截器。

#

以上是SpringBoot之攔截器注入Bean的方法介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除