Sentinel源码解析——SentinelWebInterceptor拦截器与@SentinelResource注解原理
spring-cloud-starter-alibaba-sentinel的自动装配
当我们的工程需要使用Sentinel时,如果我们引入的时spring-cloud-starter-alibaba-sentinel,那么由于spring-cloud-starter-alibaba-sentinel的使用了SpringBoot的自动装配机制加载了一些核心类,因此是不需要我们做过多复杂的配置的。
META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
# SentinelWebAutoConfiguration里面会加载SentinelWebInterceptor
com.alibaba.cloud.sentinel.SentinelWebAutoConfiguration,\
...
# SentinelAutoConfiguration里面会加载SentinelResourceAspect
com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration,\
...
SentinelWebAutoConfiguration里面会加载SentinelWebInterceptor,它使得Sentinel基于拦截器的规则校验生效。然后SentinelWebMvcConfigurer会把SentinelWebInterceptor注册到SpringMVC的拦截器链中。
@Configuration(proxyBeanMethods = false)
...
public class SentinelWebAutoConfiguration implements WebMvcConfigurer {
...
@Bean
@ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled",
matchIfMissing = true)
public SentinelWebInterceptor sentinelWebInterceptor(
SentinelWebMvcConfig sentinelWebMvcConfig) {
return new SentinelWebInterceptor(sentinelWebMvcConfig);
}
...
@Bean
@ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled",
matchIfMissing = true)
public SentinelWebMvcConfigurer sentinelWebMvcConfigurer() {
return new SentinelWebMvcConfigurer();
}
}
SentinelWebMvcConfigurer#addInterceptors(InterceptorRegistry)
@Override
public void addInterceptors(InterceptorRegistry registry) {
...
SentinelProperties.Filter filterConfig = sentinelProperties.getFilter();
// sentinelWebInterceptorOptional.get()取到