package com.iailab.framework.ratelimiter.config; import com.iailab.framework.ratelimiter.core.aop.RateLimiterAspect; import com.iailab.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; import com.iailab.framework.ratelimiter.core.keyresolver.impl.*; import com.iailab.framework.ratelimiter.core.redis.RateLimiterRedisDAO; import com.iailab.framework.redis.config.IailabRedisAutoConfiguration; import org.redisson.api.RedissonClient; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; import java.util.List; @AutoConfiguration(after = IailabRedisAutoConfiguration.class) public class IailabRateLimiterConfiguration { @Bean public RateLimiterAspect rateLimiterAspect(List keyResolvers, RateLimiterRedisDAO rateLimiterRedisDAO) { return new RateLimiterAspect(keyResolvers, rateLimiterRedisDAO); } @Bean @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") public RateLimiterRedisDAO rateLimiterRedisDAO(RedissonClient redissonClient) { return new RateLimiterRedisDAO(redissonClient); } // ========== 各种 RateLimiterRedisDAO Bean ========== @Bean public DefaultRateLimiterKeyResolver defaultRateLimiterKeyResolver() { return new DefaultRateLimiterKeyResolver(); } @Bean public UserRateLimiterKeyResolver userRateLimiterKeyResolver() { return new UserRateLimiterKeyResolver(); } @Bean public ClientIpRateLimiterKeyResolver clientIpRateLimiterKeyResolver() { return new ClientIpRateLimiterKeyResolver(); } @Bean public ServerNodeRateLimiterKeyResolver serverNodeRateLimiterKeyResolver() { return new ServerNodeRateLimiterKeyResolver(); } @Bean public ExpressionRateLimiterKeyResolver expressionRateLimiterKeyResolver() { return new ExpressionRateLimiterKeyResolver(); } }