SpringBootApplication안에 있는 어노테이션들
@SpringBootConfiguration //@Configuration과 동일
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)

ComponentScan 어노테이션
- @Component 어노테이션을 가진 클래스들을 빈으로 등록함
- @Configuration, @Repository, @Service, @Controller, @RestController도 등록
- ComponentScan의 basePackages는 자기자신의 위치로, 자기자신과 동일한 패키지 & 하위 패키지에 있는 애들을 스캔함
EnableAutoConfiguration 어노테이션
- spring-boot-autoconfigure -> META-INF -> spring.factories에 선언되어 있는 아래 키값 하위의 Value(Configuration)파일들은 등록 함
- 해당 어노테이션이 존재하기에 SpringBootApplication을 쉽게 띄울 수 있다!
org.springframework.boot.autoconfigure.EnableAutoConfiguration

Condition 어노테이션
- 조건에 따라 빈을 사용할지 결정해주는 어노테이션
Spring Boot Reference Documentation
This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe
docs.spring.io
SpringBootAutoConfiguration
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.auto-configuration
Spring Boot Reference Documentation
This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe
docs.spring.io
SpringBoot의 Bean등록 순서
- CompoentScan
- AutoConfiguration
CompoentScan과 AutoConfiguration에서 동일한 Bean을 정의하면 AutoConfiguration에 선언된 Bean이 덮어쓸 수 있다!
SpringBoot 2.1 부터는 동일한 메서드 이름의 같은 Bean을 생성하려고하면 아래와 같은 에러 메세지가 발생
Description: The bean 'van', defined in class path resource [kvp/van/VanConfiguration.class], could not be registered. A bean with that name has already been defined in kvp.van.springboot.SpringbootApplication and overriding is disabled.이유는 Bean Overriding기능의 default값이 false로 변경되었기 때문!
https://www.baeldung.com/spring-boot-bean-definition-override-exception#configuration-change-for-spring-boot
ConfigurationProperties & EnableConfigurationProperties
- 가이드
- https://www.baeldung.com/configuration-properties-in-spring-boot
Spring Boot 2.2 부터는 ConfigurationProperties만 있어도 알아서 등록해 줌
따라서 EnableConfigurationProperties를 선언해주지 않아도 됨
AutoConfiguration을 활용하지 않은채로 Conditional을 사용하게 되면 의도와 다르게 동작하는 경우가 발생함
예시1) VanConfiguration에 ConditionalMissingBean을 선언한 경우

예시2) VanConfiguration2에 ConditionalMissingBean을 선언한 경우

반대의 상황도 생기는 것 봐서는 랜덤인 것 같은데.... AutoConfiguration없이 Conditional

댓글