더북(TheBook)

3.1.3 자동 구성에 숨은 기능 엿보기

2.3.3절에서 다뤘듯이 스프링 부트 자동 구성은 애플리케이션에 적용할 수 있는 여러 구성 클래스로 작동한다. 이런 모든 구성은 Spring 4.0의 조건부 구성 지원 기능을 이용하여 런타임에 스프링 부트의 구성을 사용할지 여부를 결정한다.

대부분은 표 2-1에서 설명한 @ConditionalOnMissingBean 애너테이션으로 자동 구성을 오버라이드할 수 있다. 스프링 부트의 DataSourceAutoConfiguration에 정의된 JdbcTemplate 빈은 @ConditionalOnMissingBean의 작동을 설명하는 매우 간단한 예다.


@Bean
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
    return new JdbcTemplate(this.dataSource);
}

jdbcTemplate() 메서드는 @Bean 애너테이션이 붙어 있으며 필요할 때 JdbcTemplate 빈을 구성하도록 준비되어 있다. 하지만 @ConditionalOnMissing 애너테이션도 붙어 있어 (JdbcTemplate이 구현하는 인터페이스인) JdbcOperations 타입의 빈이 없을 때만 작동한다. JdbcOperations 타입의 빈을 이미 구성했다면 @ConditionalOnMissing 애너테이션 조건을 만족하지 못하므로 jdbcTemplate() 메서드는 빈 구성용으로 사용하지 않는다.

JdbcOperations 빈이 이미 있다면 결과는 어떨까? 스프링 부트는 자동 구성 클래스를 고려하기 전에 애플리케이션 레벨 구성을 먼저 로드하도록 설계했다. 따라서 이미 JdbcTemplate 빈을 구성했다면 자동 구성이 일어날 때 JdbcOperations 타입의 빈이 있으므로 자동 구성이 제공하는 JdbcTemplate 빈은 무시할 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.