package cn.lihu.jh.framework.ratelimiter.config; import cn.lihu.jh.framework.ratelimiter.core.aop.RateLimiterAspect; import cn.lihu.jh.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; import cn.lihu.jh.framework.ratelimiter.core.keyresolver.impl.*; import cn.lihu.jh.framework.ratelimiter.core.redis.RateLimiterRedisDAO; import cn.lihu.jh.framework.redis.config.JhRedisAutoConfiguration; import org.redisson.api.RedissonClient; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; import java.util.List; @AutoConfiguration(after = JhRedisAutoConfiguration.class) public class JhRateLimiterConfiguration { @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(); } }