[Spring Boot] 자동 설정 (Auto Configuration)
1. @EnableAutoConfiguration
@SpringBootApplication만 적어도 Application 실행 시
여러 설정들이 읽히면서 웹 Application이 뜨게 되는 이유는 EnableAutoConfiguration 때문
2. @SpringBootApplication
@SpringBootApplication은 다음 세 개의 어노테이션으로 바꿀 수 있음
- @SpringBootConfiguration : @Configuration과 동일(명칭만 다르다고 봐도 무방)
- @ComponentScan
- @EnableAutoConfiguration 으로 바꿀 수 있음
3. Spring Boot의 빈을 등록하는 2단계
- @ComponentScan 으로 등록
- @EnableAutoConfiguration 으로 추가적인 빈들을 읽어서 등록
@EnableAutoConfiguration가 없어도 Spring Boot는 사용할 수 있음
즉, @Configuration과 @ComponentScan만 있어도 Application 사용 가능
4. @Configuration과 @ComponentScan만으로 Application 실행하기
@Configuration
@ComponentScan
//@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
단순히 어노테이션만 바꾸고 실행하게 되면 ServletWebServerFactory 빈이 없어서 에러 발생
해당 빈은 @EnableAutoConfiguration에서 자동으로 만들어주는 빈이기 때문에
@EnableAutoConfiguration을 주석처리해서 빈이 안만들어졌고 따라서, 웹 어플리케이션으로 띄울수 없음
# main 메소드도 추가로 변경해줘야 문제없이 실행 가능함
@Configuration
@ComponentScan
//@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
}
WebApplicationType.NONE을 해서 WebApplication 타입이 아닌 Application 타입으로 설정
실행시켜보면 @EnableAutoConfiguration
즉, AutoConfiguration으로 읽어들이는 빈들이 없이도 Application이 구동되는 것을 확인할 수 있음
물론, 웹 서버로 동작하지 않음(동작하게 하려면 웹 서버용 자동 설정 필요)
5. @ComponentScan
자기 자신 어노테이션(@ComponentScan)이 붙어있는 클래스의 패키지부터 시작해서
그 하위 패키지까지 전부 훑어서 @Component 뿐만 아니라
@Configuration / @Repository / @Service / @Controller / @RestController 까지 빈으로 등록함
6. spring.factories
아래 경로에 있는 spring.factories 내에 선언된
org.springframework.boot.autoconfigure.EnableAutoConfiguration 키 값에 해당하는
모든 클래스들을 보고 조건에 맞으면 빈으로 등록함
@Configuration 어노테이션이 붙은 것을 확인할 수 있고
@ConditionalOn~은 괄호 안의 조건이 만족되는 경우만 설정파일을 사용하겠다는 의미
ex) @ConditionalOnWebApplication(type = Type.SERVLET) : WebApplication 타입이 SERVLET인 경우만 사용
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard
스프링 부트 개념과 활용 - 인프런 | 강의
스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com