자동 설정 이해
@SpringBootApplication에는 크게 세가지 중요한 설정들이 들어가 있다.
-
@SpringBootConfiguration : 스프링 부트에 관련된 설정 등록
-
@ComponentScan : 빈 파일 검색 후 등록
-
@EnableAutoConfiguration : 설정파일들 읽어 처리
웹어플리케이션으로 기동하지 않으려면?
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
@ComponentScan
@Component가 붙은 클래스들을 찾아 빈 팩토리에 등록
이 밖에도 @Configuration, @Repository, @Service, @Contorller, @RestContorller도 마찬가지로 처리
빈은 두단계로 읽힘
1단계 : @ComponentScan
2단계 : @EnableAutoConfiguration
위의 순서대로 처리하여 중복된 빈 이름이 있을 경우 나중에 명시한 빈이 등록된다.
(단, @Conditional과 같은 설정을 이용하면 먼저 읽은 빈을 등록할 수도 있음)
@EnableAutoConfiguration
spring-boot-autoconfigure의 META-INF/spring.factories에
해당 어노테이션이 붙은 기본 설정 파일들을 명시
해당 파일을 읽어 설정들을 읽어 들인다.
나만의 스프링 부트 의존성 라이브러리를 만들고 싶은 경우
xxx-spring-boot-autoconfigure : 자동 설정
xxx-spring-boot-starter : 의존성 정의
다음과 같은 네이밍 규칙으로 생성하면 됨.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>juho-spring-boot-autoconfigure</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>juho-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</denpendencies>
@EnableAutoConfigure로 자동 설정 클래스 파일 생성 방법
@Configure를 붙인 설정 자바 파일 생성 후 META-INF/spring.factories 에 다음 설정 파일 정보 등록
(ex: org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.juho.XxxConfiguration)
일반적인 getter/setter 자바 파일에 @ConfigurationProperties(“이름”)을 붙이면
application.properties에 정의한 프로퍼티와 매핑 가능
@EnableConfigurationProperties(해당프로퍼티파일.class)를 붙여 프로퍼티로 사용
@Configuration
@EnableConfigurationProperties(JuhoProperties.class)
public class JuhoConfiguration {
@Bean
@ConditionalOnMissingBean
public Juho juho(JuhoProperties properties) {
Juho juho = new Juho();
juho.setAge(properties.getAge());
juho.setName(properties.getName());
}
}