1.@SpringBootApplication
Indicates a
configurationclass that declares one or more@Beanmethods and also triggersauto-configurationandcomponent scanning. This is a convenience annotation that is equivalent to declaring@SpringBootConfiguration,@EnableAutoConfigurationand@ComponentScan.
@SpringBootApplication은 하나 혹은 둘 이상의 Bean과 자동 설정 구성 및 컴포넌트 스캔을 적용해주는 Annotation으로, 아래의 개별 Annotation들을 하나로 그룹핑하여 포함하고 있는 추상화된 형태의 메타 Annotation
2. @SpringBootApplication 내부
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
// ...
}3. 하위 Annotation 요약
3-1. @Target
Java Compiler가 annotation이 어디에 적용될지 결정하기 위해 사용
ElementType.TYPE옵션 - 타입 선언 시 사용된다는 의미
3-2. @Retention
Indicates how long annotations with the annotated type are to be retained
Annotation이 어느 시점까지 적용될지를 RetentionPolicy 를 통해 지정
3-3. @SpringBootConfiguration
Spring Boot Application에서 @Configuration을 사용할 수 있도록 제공하는 Annotation 일반적인 Spring Boot Application은 하나의 @SpringBootConfiguration을 포함해야함
@Configuration을 포함하고 있는 Annotation
3-3-1. @Configuration
@Bean Annotation을 사용하기 위해 클래스 레벨에 적용되는 Annotation, 자바 기반의 Bean 설정 파일 작성 시 사용 이 Annotation이 작성된 파일은 Bean Configuration 파일임을 Spring에게 명시
3-5. @EnableAutoConfiguration
스프링은 @Enable~로 시작하는 몇 가지 Annotation이 있는데, 이 Annotation은 ApplicationContext(스프링 컨테이너) 설정을 자동으로 구성해주는 Annotation
3-6. @ComponentScan
@Component가 작성된 클래스들을 스캔하여 해당 클래스를 스프링 컨테이너에 Bean으로 등록
excludeFilters 옵션을 사용하여 별도의 컴포넌트들은 제외할 수 있음
@Component의 스테레오타입 Annotation
@Repository, @Service, @Controller, @RestController
@Bean
메서드 레벨에 작성, 메서드의 반환 타입의 클래스를 수동으로 Bean으로 등록
@Component
클래스 레벨에 작성, 컴포넌트 스캔을 통해 자동으로 Bean으로 등록됨
그 외
@Documented
@Inherited
@Filter