Spring Boot는 자동 구성이라는 기능을 제공함.
자동 구성 : 일반적으로 자주 사용하는 수많은 빈들을 자동으로 등록해주는 기능
@SpringBootApplication
public class VoucherApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(VoucherApplication.class, args);
}
}AutoConfiguration은 @SpringBootApplication으로 부터 일어난다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {@SpringBootApplication에는 여러가지 어노테이션이 포함되어 있다.
그 중 자동 구성과 관련된 어노테이션은 @EnableAutoConfiguration.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {EnableAutoConfiguration은 AutoConfiguration을 활성화 하는 기능을 제공해 준다.
EnableAutoConfiguration은 AutoConfigurationImportSelector을 사용하는데, Selector는 동적으로 설정정보를 선택할 수 있도록 구현되어있다.
Spring Boot는 spring-boot-autoconfigure에 있는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 설정 파일들을 읽어 들여 자동 구성을 해준다.
@AutoConfiguration
@ConditionalOnProperty(name = "version", havingValue = "v2")
public class MyAppAutoConfig {@ConditionalOnProperty는 환경정보에 version=v2 옵션이 있을 때 동작하게끔 하는 장치이다.
파일 이름은 사진과 같이 동일한 이름이어야 한다.
java directory를 기준으로 해 경로 및 Class 이름 지정 .
libs라는 경로에 jar 파일을 주입 했다고 가정.
dependencies {
implementation files("libs/memory-v2.jar")
// 추가 의존성 ...
}


