From b856a9af7b6c9577bd01759246fe5f764e144fee Mon Sep 17 00:00:00 2001 From: wuxiangkai Date: Mon, 30 Oct 2023 21:21:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Espring=20mvc=E5=85=B3?= =?UTF-8?q?=E4=BA=8Einterceptor=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java se/juc.md | 29 +++++++++++++++++++++++++++++ spring/Spring core/SpringMVC.md | 19 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 java se/juc.md diff --git a/java se/juc.md b/java se/juc.md new file mode 100644 index 0000000..ac169e2 --- /dev/null +++ b/java se/juc.md @@ -0,0 +1,29 @@ +# juc +## ThreadLocal +通过ThreadLocal api,可以存储对象,并且存储的对象只有指定线程才能够访问。 + +### 示例 +```java +// 声明一个ThreadLocal对象,其中存储的Integer值和特定线程绑定 +ThreadLocal threadLocalVlaue = new ThreadLocal<>(); +// 再特定线程中,调用get/set方法,可以对与该线程绑定 +// 的integer值进行获取或设置 +threadLocalValue.set(1); +Integer result = threadLocalValue.get(); +``` +ThreadLocal类似于一个map,其中key为线程,value为与线程绑定的值,再特定线程中调用 + +### api +#### withInitial +可以通过`ThreadLocal.withInitial`方法来构造一个带初始值的threadLocal对象,该静态方法接收一个supplier对象。 +```java +ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 1); +``` +如果一个ThreadLocal对象指定了withInitial方法,那么当该ThreadLocal对象get为空时,会调用withInitial并用该方法的返回值来初始化该threadLocal对象。 + +#### remove +如果要移除ThreadLocal中的对象,可以调用`remove`方法 +```java +threadLocal.remove(); +``` + diff --git a/spring/Spring core/SpringMVC.md b/spring/Spring core/SpringMVC.md index 628146c..3696cef 100644 --- a/spring/Spring core/SpringMVC.md +++ b/spring/Spring core/SpringMVC.md @@ -59,6 +59,7 @@ - [CORS](#cors) - [@CrossOrigin](#crossorigin) - [spring boot全局配置CORS](#spring-boot全局配置cors) + - [Interceptor](#interceptor) # SpringMVC @@ -800,3 +801,21 @@ public class WebConfig implements WebMvcConfigurer { } ``` +### Interceptor +通过注册拦截器,可以在请求的请求前、请求后阶段进行处理。 + +interceptor可以通过如下方式进行注册: +```java +@Configuration +@EnableWebMvc +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new LocaleChangeInterceptor()); + registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**"); + } +} +``` +其中,如果多次调用addInterceptor添加拦截器,那么拦截器顺序即是添加顺序。 +