@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
String[] value() default {};
String prefix() default "";
String[] name() default {};
String havingValue() default "";
boolean matchIfMissing() default false;
}
name | usage |
---|---|
prefix | Property의 접두사 |
name | Property의 이름 |
havingValue | Property의 값이 이것과 일치 하였을 때 통과 시키기 |
matchIfMissing | 값을 찾지 못하였을 때 Condition을 통과 할 것인가에 대하여 |
@FunctionalInterface
public interface Condition{
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
public class TestCondition implements Condition{
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata){
return true // true일 경우 Conditional통과.
};
}
@Conditional(TestCondition.class) // TestCondition에서 통과 되었을 경우 Bean등록
public class SomeClass{}
Condition의 구현체로 SpringBootCondition이 존재하며, 로깅기능을 제공한다.