@SpringBootApplication
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@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 {
// ...
}
@Target
@Retention
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
여기서 @Target, @Retention, @Documented, @Inherited 은 메타 어노테이션이다.
더보기
Annotations applied to other annotations (also known as "Meta Annotations"):
- @Retention - Specifies how the marked annotation is stored, whether in code only, compiled into the class, or available at runtime through reflection.
- @Documented - Marks another annotation for inclusion in the documentation.
- @Target - Marks another annotation to restrict what kind of Java elements the annotation may be applied to.
- @Inherited - Marks another annotation to be inherited to subclasses of annotated class (by default annotations are not inherited to subclasses).
- @Retention-코드로 표시되거나 클래스로 컴파일되거나 리플렉션을 통해 런타임에 사용 가능한지 여부에 관계없이 표시된 주석이 저장되는 방법을 지정합니다.
- @Documented-문서에 포함 할 다른 주석을 표시합니다.
- @Target-주석이 적용될 수있는 Java 요소의 종류를 제한하기 위해 다른 주석을 표시합니다.
- @Inherited-주석이 달린 클래스의 서브 클래스에 상속 될 다른 주석을 표시합니다 (기본적으로 주석은 서브 클래스에 상속되지 않습니다).
출처 https://en.wikipedia.org/wiki/Java_annotation
주요 어노테이션인 @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan 을 살펴보면
@SpringBootConfiguration
- @Configuration 용도
- 컨텍스트에 추가 Bean을 등록하거나 추가적인 configuration 클래스를 import 할 수 있음
- 참고링크 https://www.baeldung.com/springbootconfiguration-annotation
@EnableAutoConfiguration
- 스프링 프레임워크에서 많이 쓰이는 스프링 bean들을 자동적으로 컨테이너에 등록
- spring-boot-autoconfigure-2.x.x.RELEASE.jar\META-INF\spring.factoies 의 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\아래 @Configuration 있는 클래스를 모두 Load
@ComponentScan
- @ComponentScan 이 붙은 클래스가 위치해있는 현재 패키지 기준으로 그 아래 패키지를 찾아 stereotype annotation(@Component, @Repository, @Service, @Controller)이 붙은 클래스를 스프링 빈으로 등록.
'Dev' 카테고리의 다른 글
[Spring Boot] @Controller @RestController 차이 (0) | 2019.12.16 |
---|---|
[slf4j] msg VS argArray (0) | 2019.12.10 |
[git] remote: Invalid username or password. fatal: Authentication failed (0) | 2019.03.21 |
[jpa] 주요키를 공유하는 일대일 단방향 연관 (0) | 2019.03.05 |
[jpa] 참조키를 이용한 1:1 양방향 연관 - Lazy Loading (0) | 2019.03.03 |