解決痛點:
我們在攔截器內已經獲取並解析了一遍token資料,如圖:
然後在獲取當前登入使用者詳細資訊時又做了一遍同樣的操作,如圖:
後續如果說需要用到當前登入使用者的資訊時都要帶上token引數,這樣是很冗餘的。這時就會用到 ThreadLocal 來進行最佳化處理。
ThreadLocal工具類
/** * ThreadLocal 工具類 */ @SuppressWarnings("all") public class ThreadLocalUtil { //提供ThreadLocal物件, private static final ThreadLocal THREAD_LOCAL = new ThreadLocal(); //根據鍵獲取值 public static <T> T get(){ return (T) THREAD_LOCAL.get(); } //儲存鍵值對 public static void set(Object value){ THREAD_LOCAL.set(value); } //清除ThreadLocal 防止記憶體洩漏 public static void remove(){ THREAD_LOCAL.remove(); } }
我們將工具類建立在 utils 包下
使用方法:
我們只需在攔截器內,把業務資料透過set方法儲存到ThreadLocal中,使用時再透過get方法獲取即可。
執行結果展示:
到此還未結束,當使用完後要即時清除 ThreadLocal 資料防止記憶體洩漏。
只需要在攔截器中的afterCompletion方法中清除ThreadLocal中的資料即可。