반응형
@SpringBootApplication
스프링부트 템플릿을 통해 프로젝트를 생성하면 아래와 같이 자동으로 xxxApplication
에 메인메소드가 생성이 된다.
@SpringBootApplication
public class FileDbWorkApplication {
public static void main(String[] args) {
SpringApplication.run(FileDbWorkApplication.class, args);
}
}
그 곳에 @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 {
...
여러 어노테이션으로 설정되어있는 것을 볼 수 있는데, 여기서 중요한 것은@ComponentScan
이랑 EnableAutoConfiguration
이다.
@ComponentScan
@SpringBootApplication 어노테이션이 붙은, 즉 컴포넌트 스캔이 선언된 하위 패키지에서
@Component
@Configuration
@Controller
@RestController
@Service
@Repository
와 같은 Annotation이 선언된 클래스를 스프링 컨테이너의 메모리로 읽어와 애플리케이션에서 사용할 수 있는 Bean 형태로 등록하게 된다.
@EnableAutoConfiguration
컴포넌트 스캔 이후 EnableAUtoConfiguration으로 추가적인 Bean들을 읽어서 등록한다.
spring.factories 내부에 여러 Configuration들이 있고, 조건에 따라서 Bean을 등록한다.
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
...
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
...
org.springframework.boot.autoconfigure.EnableAutoConfiguration
라는 Key 값으로 많은 Class를 가지고 있다. 해당 클래스들은 상단에 @Configuration
이라는 Annotation을 가지고 있어 이러한 키값을 통해 명시된 많은 클래스들이 AutoConfiguration의 대상이 된다.
반응형
'웹 프로그래밍 > [ Spring Boot ]' 카테고리의 다른 글
[ SpringBoot ] 05. RestController가 뭐죠? (0) | 2021.10.12 |
---|---|
[ SpringBoot ] 04. Lombok 라이브러리 (0) | 2021.10.12 |
[ SpringBoot ] 03. Spring의 Bean Scope를 알아보자 (0) | 2021.10.12 |
[ SpringBoot ] 02. Spring의 Autowiring과 Qualifer (0) | 2021.10.12 |
[ SpringBoot ] 01. Spring Bean의 LifeCycle (0) | 2021.10.12 |