@EnableAutoConfiguration
@SpringBootApplication
public class SpringbootgettingstartedApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootgettingstartedApplication.class, args);
}
}
위에 코드만 작성하면 webApplication이 읽히고 tomcat이 구동이 된다.
이는 @SpringBootApplication의 @EnableAutoConfiguration 덕분이다.
SpringBoot는 Bean을 두 단계로 등록을 한다.
- @ComponentScan에서 등록 (1)
- @EnableAutoConfiguration에서 등록 (2)
아래와 같은 방식으로 코드를 작성하고 실행을 하면 오류가 발생한다. (@EnableAutoConfiguration 제거)
@Configuration
@ComponentScan
public class SpringbootgettingstartedApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SpringbootgettingstartedApplication.class);
springApplication.run();
}
}
@EnableAutoConfiguration가 ServletWebServerApplicationContext를 내부에서 설정을 해주는데 해당 어노테이션을 제거하면 ServletWebServerFactory에 대한 bean을 생성하지 못하므로 에러가 발생한다.
일단은 WebApplication이 아닌 타입으로 실행을 하면 해당 오류가 발생하지 않는다.
@Configuration
@ComponentScan
public class SpringbootgettingstartedApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SpringbootgettingstartedApplication.class);
springApplication.setWebApplicationType(WebApplicationType.NONE);
springApplication.run();
}
}
@ComponentScan
@ComponentScan이 빈으로 주입하는 애노테이션
@ComponentScan |
@Component |
@Configuration @Repository @Service @Controller @RestController |
TypeExcludeFilteter, AutoConfigurationExlcludeFilter
제외
AutoConfigurationExlcludeFilter - AutoConfiguration에서 제외한 설정은 읽어드리지 않는다.
TypeExcludeFilteter - SpringBoot 내부에서 필요 없는 빈을 걸러내는 작업
https://jwdeveloper.tistory.com/76?category=823920
간단하게 말하자면 @ComponentScan이 붙어있는 하위 패키지에 있는 자바 클래스들 중 위에 언급하였던 애노테이션이 있으면
해당 클래스를 Bean으로 등록해준다. (경로가 다른 패키지는 Bean으로 등록 불가!)
@EnableAutoConfiguration
@EnableAutoConfiguration은 Spring의 META 파일을 읽는다.
spring.factories 내부에는 EnableAutoConfuration의 KEY 값으로 여러 configuration 파일들이 저장되어있다. (이것이 바로 컨벤션)
- 기본 설정
해당 configuration
파일 내부에는
모두
@Configuration
애노테이션이
붙어있다.
하지만 실제로 이 모든 설정 파일이 전부
설정되는 것은 아니다.
해당 Configuration의 내부를 살펴보면 조건에 따라 사용한다는 @Conditional... 애노테이션이 붙어있다.
코드 참조
https://github.com/mike6321/Spring/tree/master/SpringBoot/springbootgettingstarted
'Spring > Spring Boot' 카테고리의 다른 글
(SpringBoot) Spring Boot의 자동설정 구현해보기(2) (0) | 2020.01.13 |
---|---|
(SpringBoot) Spring Boot의 자동설정 구현해보기(1) (0) | 2020.01.13 |
(SpringBoot) SpringBoot 의존성 관리 (0) | 2020.01.12 |
(SpringBoot) Spring Mvc(4) - 정적 리소스 지원 (0) | 2020.01.11 |
(SpringBoot) Spring Mvc(3) - ViewResolver (0) | 2020.01.10 |