@SpringBootApplication
org.springframework.boot.autoconfigure
패키지 안에 들어있다.
@SpringBootConfiguration
현재 클래스가 Spring의 설정 파일임을 알려주는 어노테이션
- Configuration을 클래스에 적용하고 @Bean을 해당 클래스의 메소드에 적용하면 빈으로 등록된다.
@ComponentScan
- @Component @Configuration @Repository @Service @Controller @RestController
- 해당 어노테이션이 선언된 하위 패키지에서 위와 같은 Annotation을 찾아서 Bean으로 등록한다.
@EnableAutoConfiguration
어플리케이션에 추가된 설정들을 자동으로 추가해주는 어노테이션
- 스프링 부트의 Application Context 설정을 자동으로 수행한다는 어노테이션으로,
META-INF/spring.factories
에 정의되어 있는 configuration 대상 클래스들을 빈으로 등록한다.
- 위 파일에 정리된 클래스들은 @Configuration 어노테이션이 없어도 자동으로 빈이 등록
- 추가로 개발자가 직접 이 spring.factories에 클래스를 적어 넣으면 Auto Configuration 대상에 포함된다.
Auto Configuration Mechanism
- 이렇게 많은 클래스들이 항상 다 빈으로 등록되면 엄청난 리소스 낭비가 된다.
AutoConfigurationImportSelector
클래스를 통해서 필터링 작업을 수행
AutoConfigurationImportSelector
의 Auto Configuration 필터링 과정 https://velog.io/@jwkim/spring-boot-springapplication-annotation
스프링 빈 등록 방식
1. 컴포넌트 스캔 대상
- @Component @Configuration @Repository @Service @Controller @RestController
2. Java 코드로 등록
- @Configuration 스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
- 빈으로 등록하기 위해 인스턴슬르 생성하는 메소드 위에 @Bean을 명시한다.
@Bean vs @Component
- @Bean
- 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우 사용된다.
- 메소드 또는 어노테이션 단위로 붙일 수 있다.
- @Component
- 개발자가 직접 컨트롤이 가능한 클래스들의 경우에 사용된다.
- 클래스 또는 인터페이스 단위에 붙일 수 있다.