真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot之?dāng)r截器注入Bean的示例

小編給大家分享一下SpringBoot之?dāng)r截器注入Bean的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站于2013年開始,先為祥云等服務(wù)建站,祥云等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為祥云企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

由于業(yè)務(wù)需要,需要在攔截器中操作redis緩存,按照 controller,service層配置發(fā)現(xiàn)無法注入,一直報(bào)空指針異常。

解決方案

@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 redisTemplate;

    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
            //業(yè)務(wù)邏輯
         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 {
        
    }
}

查詢原因

攔截器執(zhí)行在Bean初始化之前導(dǎo)致這個(gè)問題的。在web.xml中各個(gè)元素的執(zhí)行順序是這樣的,context-param-->listener-->filter-->servlet; 而攔截器是在Spring MVC中配置的,如果從整個(gè)項(xiàng)目中看,一個(gè)servlet請求的執(zhí)行過程就變成了這樣context-param-->listener-->filter-->servlet-->interceptor,為什么攔截器是在servlet執(zhí)行之后,因?yàn)閿r截器本身就是在servlet內(nèi)部的。

概念

  • servlet:servlet是一種運(yùn)行服務(wù)器端的java應(yīng)用程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,并且可以動(dòng)態(tài)的生成web頁面,它工作在客戶端請求與服務(wù)器響應(yīng)的中間層。

  • filter:filter是一個(gè)可以復(fù)用的代碼片段,可以用來轉(zhuǎn)換HTTP請求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個(gè)請求或者響應(yīng),它只是修改對某一資源的請求,或者修改從某一的響應(yīng)。

  • listener:監(jiān)聽器,從字面上可以看出listener主要用來監(jiān)聽只用。通過listener可以監(jiān)聽web服務(wù)器中某一個(gè)執(zhí)行動(dòng)作,并根據(jù) 其要求作出相應(yīng)的響應(yīng)。通俗的語言說就是在application,session,request三個(gè)對象創(chuàng)建消亡或者往其中添加修改刪除屬性時(shí)自動(dòng)執(zhí) 行代碼的功能組件。

  • interceptor:攔截器是對過濾器更加細(xì)化的應(yīng)用,他不僅可以應(yīng)用在service方法前后還可以應(yīng)用到其他方法的前后攔截器。

以上是SpringBoot之?dāng)r截器注入Bean的示例的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前名稱:SpringBoot之?dāng)r截器注入Bean的示例
文章位置:http://weahome.cn/article/ghphpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部