예시 소스를 먼저 본다.
@Slf4j
@Configuration
public class DbConfig {
@Bean
public DataSource dataSource(){
log.info("dataSource 빈 등록");
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setJdbcUrl("jdbc:h2:mem:test");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
@Bean
public TransactionManager transactionManager(){
log.info("transactionManager 빈 등록");
return new JdbcTransactionManager(dataSource());
}
@Bean
public JdbcTemplate jdbcTemplate(){
log.info("jdbcTemplate 빈 등록");
return new JdbcTemplate(dataSource());
}
}
JDBC에 필요한 Bean들을 등록후 테스트해본다.
@Slf4j
@SpringBootTest
public class DbConfigTest {
@Autowired
DataSource dataSource;
@Autowired
TransactionManager transactionManager;
@Autowired
JdbcTemplate jdbcTemplate;
@Test
void checkBean(){
log.info("dataSource = {}",dataSource);
log.info("transactionManager = {}",transactionManager);
log.info("jdbcTemplate = {}",jdbcTemplate);
assertThat(dataSource).isNotNull();
assertThat(transactionManager).isNotNull();
assertThat(jdbcTemplate).isNotNull();
}
}
당연히 테스트는 통과된다 등록한 빈을 의존성주입을 받기 때문에 각각의 객체는 Null이아니다.
여기서 빈을 등록하는 @Configuration 어노테이션을 주석하면 어떻게될까?
그래도 테스트는 통과된다. Why?
스프링 부트는 자동 구성(Auto Configuration)이라는 기능을 제공하는데, 일반적으로 자주 사용하는 수 많은 빈들을 자동으로 등록해주는 기능이다.
JdbcTemplate , DataSource , TransactionManager 모두 스프링 부트가 자동 구성을 제공해서 자동으로 스프링 빈으로 등록된다.
자동 구성 덕분에 개발자는 반복적이고 복잡한 빈 등록과 설정을 최소화 하고 애플리케이션 개발을 빠르게 시작할 수 있다.
스프링 부트가 제공하는 자동 구성 기능을 이해하려면 다음 두 가지 개념을 이해해야 한다.
@Conditional : 특정 조건에 맞을 때 설정이 동작하도록 한다.
@AutoConfiguration : 자동 구성이 어떻게 동작하는지 내부 원리 이해
'Spring' 카테고리의 다른 글
Redis와 SpringBoot 연동 (1) | 2023.11.20 |
---|---|
@Conditional과 @AutoConfiguration (0) | 2023.11.06 |
SpringBoot와 웹서버 (0) | 2023.10.31 |
인터셉터 설정 (0) | 2023.10.05 |
전역예외처리 (1) | 2023.10.05 |