안녕하세요. 졸린개발자입니다.
오늘은 @SpringBootApplication에서
어떤 Annotation으로 이루어져 있을지 살펴봅시다.
우선 SpringBootApplication annotation을 먼저 살펴봅시다.
@Target(ElementType.TYPE)
이 어노테이션은 java.lang에서 제공하는 어노테이션입니다.
Target은 어느곳에 이 어노테이션을 쓸 수 있는지에 대해 설정하는것인데,
지금 ElementType.TYPE이라고 되어있군요.
그럼 한번 TYPE의 소스의 주석을 볼까요?
class, interface, enum, 그리고 record에 이 어노테이션을 붙을 수 있게 해줍니다.
@Retention(RetentionPolicy.RUNTIME)
이 어노테이션은 java.lang에서 제공하는 어노테이션입니다
Retention의 뜻은 유지, 유지력입니다.
뜻 그대로, 이 어노테이션이 어디까지 유지될지 결정합니다.
그럼 RUNTIME의 주석을 볼까요?
runtime까지 유지하는군요.
이 Retention으로 인해 Runtime에 해당 어노테이션의 정보를 알 수 있습니다.
@Doucment
javadoc에서 해당 어노테이션을 같이 문서화합니다.
@Inherited
해당 어노테이션이, 클래스를 상속하는 자식 클래스에게도 적용됩니다.
예를 들어봅시다.
현재 @SpringBootApplication이 적용된 MainClass가 있다고 가정합시다.
그럼 이 MainClass를 상속한 SubClass라는 클래스도 @SpringBootApplication이 적용됩니다.
만약 @Inhertied가 없다면, MainClass를 상속한 SubClass는 @SpringBootApplication이 적용되지 않습니다.
@SpringBootConfiguration
소스코드상으로는 Configuration밖에 없군요.
주석을 봐야겠습니다.
(사진은 클릭하면 크게보입니다.)
spring boot application @Configuration을 제공하는것을 가리켜주기 위해 있다고 나오네요.
그럼 @Configuration쓰면 되는거 아닌가? 생각이 드네요.
@Configuration쓰기에는 나중에 확장가능성이 있으니까 이걸 둔건가? 라는 생각도 드네요
@EnableAutoConfiguration
소스상으로는 크게 볼 것은 없군요.
좀 더 찾아보니 Spring boot의 자동설정과 관련되어있는것 같습니다.
이 어노테이션이 붙으면, Spring boot의 spring.factories에 적혀있는 자동설정들을 불러와주는것 같습니다.
자세한건 나중에 더 공부해봐야겠네요.
@ComponentScan
Component를 base package로부터 scan해서
@Component가 붙어있는 클래스들을 bean으로 등록해주는 scan을 가능하게 해주는 어노테이션입니다.
근데 excludeFilters에 FilterType은 CUSTOM이고 class는 TypeExcludeFilter.class가 있군요.
저건 뭘까요?
주석을 읽어보니, TypeFilter를 구현한 Custom filter들에 대해, filter를 동작시킬 수 있도록 하네요.
즉, 이게 있어야 TypeFilter를 구현한 클래스가 제대로 작동할 수 잇겠네요.
exclude filter에 AutoConfigurationExcludeFilter가 또 있군요.
저건 뭘까요?
이미 등록된 bean이 auto configuration에서 또 다시 등록되지 않도록 하는것 같군요
솔직히 정보를 찾기가 쉽지않고, 저 주석 하나로 뭘 알수가 없네요.
결론
@SpringBootApplication은 총 3개의 어노테이션으로 구성되어 있습니다.
- SpringBootConfiguration - configuration
- EnableAutoConfiguration - 자동설정
- ComponentScan
'Spring > Spring Boot' 카테고리의 다른 글
Spring에서 생기는 Failed to connect to service endpoint 해결과정 (0) | 2022.05.14 |
---|---|
Spring Boot, EC2에 배포했을때, The requested metadata is not found 오류 해결과정 (0) | 2022.04.28 |
SpringBoot에서 Web server를 끄고 실행하는법 (0) | 2022.04.17 |