스프링 부트 Auto Configuration
스프링 부트는 자동 구성 기능을 제공
- 일반적으로 자주 사용하는 수 많은 빈들을 자동으로 등록해주는 기능
@AutoConfiguration
자동 구성을 사용하려면 해당 어노테이션을 등록해야 한다.
- 자동 구성 내부에도 @Configuration 이 존재
- 빈을 등록하는 자바 설정 파일로 사용 가능
- 자동 구성이 실행되는 순서를 지정 가능
- after = DataSourceAutoConfiguration.class
- JdbcTemplate는 DataSource가 필요하기 때문에 DataSourceAutoConfiguration 다음에 실행하도록 설정
- after = DataSourceAutoConfiguration.class
- @ConditionalOnClass
- if 문과 유사한 기능 제공
- 이런 클래스가 있는 경우에만 설정이 동작
- 설정이 없다면 무효화되고, 빈도 등록되지 않음
- if 문과 유사한 기능 제공
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(JdbcProperties.class)
@Import({ DatabaseInitializationDependencyConfigurer.class, JdbcTemplateConfiguration.class,
NamedParameterJdbcTemplateConfiguration.class })
public class JdbcTemplateAutoConfiguration {
}
- @Configuration
- 자바 설정 파일로 사용
- @ConditioanlOnMissingBean
- 해당 빈이 없을 때 동작
스프링 부트는 많은 자동 구성을 제공하고 spring-boot-autoconfigure에 자동 구성을 모아둔다.
@ConditionalOnXxx
- @ConditionalOnClass, @ConditionalOnMissingClass
- 클래스가 있는 경우 동작, 없는 경우 동작
- @ConditionalOnBean, @ConditionalOnMissingBean
- 빈이 등록되어 있는 경우 동작, 없는 경우 동작
- @ConditionalOnProperty
- 환경 정보가 있는 경우 동작
- @ConditionalOnResource
- 리소스가 있는 경우 동작
- @ConditionalOnWebApplication, @ConditionalOnNotWebApplication
- 웹 애플리케이션 인 경우 동작, 아닐 경우 동작
- @ConditionalOnExpression
- SpEL 표현식에 만족하는 경우 동작
스프링 부트 자동 구성 동작 순서
- @SpringBootApplication
- @EnableAutoConfiguration
- @Import(AutoConfigurationImportSelector.class)
ImportSelector
@Import에 설정 정보를 추가하는 방법은 2가지
- 정적인 방법 : @Import(클래스) 정적인 방식, 코드에 대상이 박혀있다.
- 설정으로 사용할 대상을 동적으로 변경 불가
- 동적인 방법 : @Import(ImportSelector), 코드로 프로그래밍해서 설정으로 사용할 대상을 동적으로 선택 가능
ImportSelector 인터페이스를 통해 설정 정보 대상을 동적으로 선택 할 수 있음
@EnableAutoConfiguration
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
AutoConfigurationImportSelector는 ImportSelector의 구현체
- 설정 정보를 동적으로 선택할 수 있음
- 해당 경로의 파일을 확인
- META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
- 자동 구성이 내부에서 컴포넌트 스캔을 사용하면 안됨
@AutoConfiguration
- 스프링 부트에서 Auto Configuration으로 처리될 수 있는 후보를 명시하는 역할
- before, after 속성을 통해 Auto Configuration 시 처리 순서를 제어할 수 있음
'Back-end' 카테고리의 다른 글
Spring HttpMessageConverter (0) | 2024.01.28 |
---|---|
Query DSL 성능 개선 (0) | 2024.01.20 |
Spring Validation in Kotlin (0) | 2024.01.14 |
Spring @Async + ThreadPoolTaskExecutor (0) | 2024.01.14 |
Spring Security Filter (0) | 2024.01.01 |