@Conditional 로 특정 빈 등록 조건 만들기
TIL/Java2025. 3. 21. 16:09
테스트 환경에서는 실행되지 않아야 하는 파일이 있을 수 있다.
그럴 때? @Conditional 어노테이션을 사용하면 쉽게 조건을 만들어서 구현할 수 있다.
@Conditional 어노테이션은 정의된 조건에 맞춰 빈 등록을 할 지 말지 정해준다.
예를 들어서, 개발 환경에서만 따로 로그를 찍는 빈이 있다고 해 보자.
간단히 Condition을 구현해서, matches 함수를 오버라이드하면 커스텀 조건을 작성할 수 있다.
true를 리턴하는 조건에서 Conditional 조건을 만족하여 작동하게 된다.
아래는 실행시 지정한 프로파일이 dev 일 때만 true를 리턴한다.
public class LoggingCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
final Environment environment = context.getEnvironment();
return environment.acceptsProfiles("dev");
}
}
지정한 조건을 사용하는 건 이렇게!
@Service
@Conditional(value = {LoggingCondition.class})
public class DevEnvLoggingService {
...
}
이것 외에도 자바 버전에서 한정하는 @ConditionalOnJava(JavaVersion.EIGHT),
특정 클래스가 존재할 때만으로 한정하는 @ConditionalOnClass(SomeClass.class),
반대로 특정 클래스가 없을 때만 한정하는 @ConditionalOnMissingClass(NoClass.class),
특정 빈이 등록되어야만 하는 @ConditionalOnBean(BeanClass.class) 등등 다양한 조건을 지정할 수 있다.
'TIL > Java' 카테고리의 다른 글
@Scheduled / Virtual Thread, @Async, @Synchronized (0) | 2025.08.14 |
---|---|
JPAㅠ (0) | 2025.03.14 |
[Gradle] --project-prop 옵션으로 특정 파일 제외하여 빌드하기 (2) | 2025.03.07 |