@EnableAutoConfiguration
Spring Boot 애플리케이션이 시작되면 spring-boot-autoconfigure 모듈에 미리 정의된 Configuration 클래스들이 자동으로 구성됩니다. (스프링 부트 자동 구성 목록)
Auto Configuration이 실제 실행되는지 여부는 클래스 경로에 종속 클래스가 있는지 여부에 따라 달라집니다.
예를 들어, @ConditionalOnClass
는 클래스 패스에 특정 class가 존재할 때만 조건이 만족됩니다.
Custom AutoConfiguration Starter 만들기
1. application.properties 파일의 사용자 정의 속성
@Data
@Component
@ConfigurationProperties(prefix = "custom")
public class CustomProperties {
private String message;
private String url;
}
@ConfigurationProperties의 접두사와 클래스 필드 이름은 application.properties 와 맵핑됩니다.
custom.message = hello world
custom.url = localhost
2. 라이브러리용 빈 만들기
@Slf4j
@RequiredArgsConstructor
public class CustomService implements InitializingBean {
private final CustomProperties customProperties;
@Override
public void afterPropertiesSet() throws Exception {
log.info("CustomService init");
log.info("message : {}", customProperties.getMessage());
log.info("url : {}", customProperties.getUrl());
}
}
3. AutoConfiguration
@Configuration
@EnableConfigurationProperties(CustomProperties.class)
public class CustomAutoConfiguration {
@Bean
public CustomService customService(CustomProperties customProperties){
return new CustomService(customProperties);
}
}
4. spring.factories 파일 추가
src/main/resources/META-INF
경로에 다음 내용을 추가합니다.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfigure.configure.CustomAutoConfiguration
5. AutoConfiguration 사용
스타터를 사용할 프로젝트를 만들고 pom.xml에 종속성을 추가합니다.
<dependency>
<groupId>com.example</groupId>
<artifactId>auto-configure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
application.properties 파일에 사용자 정의 속성을 정의하고 프로젝트를 시작하면 다음과 같이 빈이 초기화되는 것을 볼 수 있습니다.