在 Spring Boot 中,攔截器和動態代理都是用來實現功能增強的,所以在很多時候,有人會認為攔截器的底層是通過動態代理實現的,所以本文就來盤點一下他們兩的區別,以及攔截器的底層實現。lEw28資訊網——每日最新資訊28at.com
lEw28資訊網——每日最新資訊28at.com
此時用戶登錄權限的驗證方法就會執行,這就是攔截器的執行過程。因此,可以得出結論,攔截器的實現主要是依賴 Servlet 或 Spring 執行流程來進行攔截和功能增強的。lEw28資訊網——每日最新資訊28at.com
二、動態代理
動態代理是一種設計模式,它是指在運行時提供代理對象,來擴展目標對象的功能。在 Spring 中的,動態代理的實現手段有以下兩種:lEw28資訊網——每日最新資訊28at.com
- JDK 動態代理:通過反射機制生成代理對象,目標對象必須實現接口。
- CGLIB 動態代理:通過生成目標類的子類來實現代理,不要求目標對象實現接口。
動態代理的主要作用包括:lEw28資訊網——每日最新資訊28at.com
- 擴展目標對象的功能:如添加日志、驗證參數等。
- 控制目標對象的訪問:如進行權限控制。
- 延遲加載目標對象:在需要時才實例化目標對象。
- 遠程代理:將請求轉發到遠程的目標對象上。
三、攔截器 VS 動態代理
因此,我們可以得出結論,攔截器和動態代理雖然都是用來實現功能增強的,但二者完全不同,他們的主要區別體現在以下幾點:lEw28資訊網——每日最新資訊28at.com
- 使用范圍不同:攔截器通常用于 Spring MVC 中,主要用于攔截 Controller 請求。動態代理可以使用在 Bean 中,主要用于提供 bean 的代理對象,實現對 bean 方法的攔截。
- 實現原理不同:攔截器是通過 HandlerInterceptor 接口來實現的,主要是通過 afterCompletion、postHandle、preHandle 這三個方法在請求前后進行攔截處理。動態代理主要有 JDK 動態代理和 CGLIB 動態代理,JDK 通過反射生成代理類;CGLIB 通過生成被代理類的子類來實現代理。
- 加入時機不同:攔截器是在運行階段動態加入的;動態代理是在編譯期或運行期生成的代理類。
- 使用難易程度不同:攔截器相對簡單,通過實現接口即可使用。動態代理稍微復雜,需要了解動態代理的實現原理,然后通過相應的 api 實現。
小結
在 Spring Boot 中,攔截器和動態代理都是用來實現功能增強的,但二者沒有任何關聯關系,它的區別主要體現在使用范圍、實現原理、加入時機和使用的難易程度都是不同的lEw28資訊網——每日最新資訊28at.com
本文鏈接:http://www.tebozhan.com/showinfo-26-10448-0.htmlSpringBoot攔截器和動態代理有什么區別?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: WPF依賴屬性介紹和用法舉例
下一篇: Go并發可視化解釋 – select語句
標簽: