보통은 스프링 부트 자동 구성 클래스의 소스 코드를 볼 필요가 없다. 하지만 표 2-1에 있는 애너테이션을 사용하는 방법을 보여 주려고 스프링 자동 구성 라이브러리가 제공하는 DataSource AutoConfiguration 일부를 발췌했다.
@Configuration @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) @EnableConfigurationProperties(DataSourceProperties.class) @Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class }) public class DataSourceAutoConfiguration { ... }
DataSourceAutoConfiguration은 @Configuration 애너테이션이 붙은 클래스로 다른 구성 클래스에서 추가적으로 구성을 가져오며, 자체적으로도 빈을 몇 개 정의한다. DataSourceAutoConfiguration에서 가장 주목할 점은 DataSource와 EmbeddedDatabaseType 둘 다 클래스패스에 있도록 요구하려고 @ConditionalOnClass 애너테이션을 붙였다는 것이다. 클래스패스에 DataSource와 EmbeddedDatabaseType이 없다면 조건을 만족하지 못하므로 DataSourceAutoConfiguration이 제공하는 구성들은 모두 무시한다.
DataSourceAutoConfiguration에 중첩된 JdbcTemplateConfiguration 클래스는 JdbcTemplate 빈의 자동 구성을 담당한다.
@Configuration @Conditional(DataSourceAutoConfiguration.DataSourceAvailableCondition.class) protected static class JdbcTemplateConfiguration { @Autowired(required=false) private DataSource dataSource; @Bean @ConditionalOnMissingBean(JdbcOperations.class) public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(this.dataSource); } … }