본문 바로가기
카테고리 없음

빈등록 조건 어노테이션

by foreverever 2022. 7. 7.
반응형
@Configuration
public class CacheServiceConfiguration {
    @Bean
    @ConditionalOnExpression("'${cache.type}'=='local'")
    public LocalCache localCache() {
        return new LocalCache();
    }

    @Bean
    @ConditionalOnBean(LocalCache.class)
    public TokenRepository tokenLocalRepository(){
        return new TokenLocalRepository(localCache());
    }

    @Bean
    @ConditionalOnMissingBean(LocalCache.class)
    public TokenRepository tokenRedisRepository(StringRedisTemplate stringRedisTemplate){
        return new TokenRedisRepository(stringRedisTemplate);
    }

    @Bean
    @ConditionalOnBean(LocalCache.class)
    public RateLimitRepository rateLimitLocalRepository(){
        return new RateLimitLocalRepository(localCache().getStringLong());
    }

    @Bean
    @ConditionalOnMissingBean(LocalCache.class)
    public RateLimitRepository rateLimitRedisRepository(){
        return new RateLimitRedisRepository(new RedisTemplate<>());
    }
}

@ConditionalOnBean(.class)

- 괄호안의 클래스 타입의 빈이 이미 생성되어 있는 경우, 해당 빈을 등록

 

@ConditionalOnMissingBean(.class)

- 괄호안의 클래스 타입의 빈이 없을 경우, 해당 빈을 등록

 

@ConditionalOnExpression(SpEL)

- SpEL 조건이 충족되면 빈 등록

반응형