조건에 따라 빈의 등록 여부를 결정.

빈 충돌,

@Bean과 @Component와 같이 사용한다.

  1. Condition인터페이스를 구현한다.

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

조건부 빈 등록

  1. @Bean ,@Component + @Condition

    개별 빈(빈 1개)에 대해서 등록

  2. @Configuration + @Import + Importselector

    빈 여러 개를 Importselector를 통해 조건부 결정.

Untitled