이때 JdbcTemplateCondition을 통과할 때만 MyService 빈을 생성한다. 다시 말해 JdbcTemplate이 클래스패스에 있을 때만 MyService 빈을 생성한다. 그렇지 않으면 이 빈 선언은 무시된다.
여기서 보여 준 조건은 비교적 간단하지만, 스프링 부트는 조금 더 흥미로운 조건으로 조건 클래스를 정의하고 이를 스프링 부트 자동 구성을 만드는 구성 클래스에 적용한다. 스프링 부트는 몇 가지 특별한 조건 애너테이션을 정의하고, 이들을 구성 클래스에 사용하여 조건부 구성을 적용한다. 표 2-1은 스프링 부트가 제공하는 조건 애너테이션이다.
▼ 표 2-1 자동 구성에서 사용하는 조건 애너테이션
조건 애너테이션 |
구성을 적용하는 조건 |
@ConditionalOnBean
|
대상 빈을 구성함 |
@ConditionalOnMissingBean
|
대상 빈을 아직 구성하지 않음 |
@ConditionalOnClass
|
대상 클래스가 클래스패스에 있음 |
@ConditionalOnMissingClass
|
대상 클래스가 클래스패스에 없음 |
@ConditionalOnExpression
|
스프링 표현식 언어(SpEL)가 참(true) |
@ConditionalOnJava
|
자바 버전이 특정 버전 또는 버전 범위에 맞음 |
@ConditionalOnJndi
|
JNDI InitialContext가 사용 가능하고, 선택적으로 지정한 JNDI 위치가 있음 |
@ConditionalOnProperty
|
지정한 구성 프로퍼티가 기대하는 값을 가짐 |
@ConditionalOnResource
|
지정한 리소스가 클래스패스에 있음 |
@ConditionalOnWebApplication
|
애플리케이션이 웹 애플리케이션임 |
@ConditionalOnNotWebApplication
|
애플리케이션이 웹 애플리케이션이 아님 |