조건에 따라 빈의 등록 여부를 결정.
빈 충돌,
@Bean과 @Component와 같이 사용한다.
Condition의 matches()를 구현한 클래스를 @Conditional로 지정한다.
//Condition인터페이스를 구현한 클래스를 먼저 만들어야한다.
class ExCondition implements Condition{
public boolean matches(Conditioncontext **context**, AnnotatedTypeMetadata **metadata**){
if(...){
...
return ...;
}
return ...;
}
}
//Conditioncontext :빈 목록 환경 정보
/*
AnnotatedTypeMetadata : @Conditional가 붙은 클래스가 metadata로 들어옴.
어떤 클래스에 @Conditional을 붙였는지를 metadata를 통해 알 수 있음.
*/
@Component
@Conditional(ExCondition.class)
class Car{public String toSting(){return"Car(){}";}}
/*
Conditional에 (ExCondion.class)가 환경 정보(**context**)를 읽어 조건을 검사한다.
matches에서 true가 나오면 빈 등록, false면 등록 안함.
*/
예시.
https://sunghs.tistory.com/153
조건부 빈 등록
@Bean ,@Component + @Condition
개별 빈(빈 1개)에 대해서 등록
@Configuration + @Import + Importselector
빈 여러 개를 Importselector를 통해 조건부 결정.
