-
@SpringBootApplication의 역할Spring Framework 2022. 6. 24. 00:01728x90
Spring Boot 프로젝트를 생성한 후 main 메서드는 아래와 같습니다.
@SpringBootApplication public class AnthillApplication { public static void main(String[] args) { SpringApplication.run(AnthillApplication.class, args); } }
@SpirngBootApplication 내부로 들어가 보면 아래와 같습니다.
@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
해당 어노테이션이 부착될 수 있는 타입을 지정합니다.
ElementType.type은 타입 선언 시 사용한다는 의미입니다.
@Retention
어노테이션이 적용되고 유지되는 범위입니다.
RetentionPolicy.RUNTIME은 컴파일 이후에도 JVM에 의해서 계속 참조가 가능하다는 의미입니다.
@Documented
javadoc으로 api문서를 만들 때 어노테이션에 대한 설명도 포함하도록 지정해주는 것입니다.
@Inherited
어노테이션이 자식 클래스에도 상속되도록 합니다.
세가지 주요 기능은 다음과 같습니다
@ComponentScan
@ComponentScan이 선언된 하위 패키지에서 다음과 같은 Anntaion을 찾아 Bean으로 등록합니다. (@Component, @Configuration @Repository @Service @Controller @ResteController)
@EnableAutoConfigure
Spring Boot auto-configuration attempts to automatically configure your Spring application based on the jar dependencies that you have added. For example, if HSQLDB is on your classpath, and you have not manually configured any database connection beans, then Spring Boot auto-configures an in-memory database.
공식문서의 내용입니다.
jar 종속성 기반으로 애플리케이션을 자동 설정해줍니다.
예를 들면 HSQLDB가 클래스 경로에 있고 데이터베이스 연결 빈을 수동으로 구성하지 않는 경우에 메모리 내 DB를 자동으로 구성합니다.
조금 더 쉽게 말하자면 다음과 같이 설명할 수 있습니다.
SpringBoot에서 AutoConfiguration을 가능하게 해주는 어노테이션입니다.
기타 라이브러리의 클래스를 자동으로 빈 등록해줍니다.
예를 들어 tomcat, DispatcherServlet 등의 자동 설정을 제공합니다.
@SpringBootConfiguration
컨텍스트에서 추가 빈을 등록하거나 추가 구성 클래스를 가져올 수 있습니다.
Spring에서 사용되는 @Configuration의 대안입니다.
출처
https://sanghye.tistory.com/39
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.auto-configuration
https://livenow14.tistory.com/52
'Spring Framework' 카테고리의 다른 글
토비의 스프링 부트 강의 요약 (0) 2023.01.29 @Transactional 어노테이션이란? (0) 2022.09.14 @Bean vs @Component (0) 2022.05.24 필터와 인터셉터의 차이점 (0) 2022.05.22 스프링 부트 - 회원 관리 예제 실습 (순수 JDBC로 H2 데이터베이스 연동) (0) 2022.04.24