728x90
@Conditional
특정 조건이 참인 경우에만 빈에 등록해야하는 상황에 사용할 수 있습니다.
Condition 인터페이스를 상속받아 구현해 사용합니다.
반환타입은 boolean 값입니다.
@FunctionalInterface
public interface Condition {
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
@Slf4j
public class MemoryCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// -Doption=dev
String memory = context.getEnvironment().getProperty("option");
log.info("memory={}",memory);
return "dev".equals(memory );
}
}
option이라는 속성을 설정하고 속성의 값이 dev 이면 참을 반환합니다.
@Configuration
@Conditional(MemoryCondition.class) // 해당 결과가 참이어야 빈으로 등록.
public class MemoryConfig {
@Bean
public MemoryController memoryController() {
return new MemoryController(memoryFinder());
}
@Bean
public MemoryFinder memoryFinder() {
return new MemoryFinder();
}
}
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
/**
* All {@link Condition} classes that must {@linkplain Condition#matches match}
* in order for the component to be registered.
*/
Class<? extends Condition>[] value();
}
@Conditional 을 사용하며 condition 인터페이스를 구현한 클래스를 입력합니다.
해당 결과가 참이어야 빈으로 등록하며, VM 옵션에서 값이 참이 아니라면 해당 빈은 등록되지 않습니다.
해당 방법처럼 설정하면 됩니다.
참고 : 김영한님 인프런 스프링부트 강의
728x90
'Spring > Spring-detail' 카테고리의 다른 글
동시성 문제 해결 - Synchronized, Pessimistic Lock, Optimistic Lock, Redis (0) | 2024.04.08 |
---|---|
@Transactional 안에 @Transactional 테스트 (0) | 2024.03.04 |
@ConfigurationProperties / @ConfigurationPropertiesBean (0) | 2023.08.23 |
JAVA 싱글톤, Spring 싱글톤에 대해. (0) | 2023.03.23 |
Jar 파일에 대해 (0) | 2023.03.01 |
댓글