AutoConfiguration은 말 그대로 설정을 자동화 해주는 것을 말한다. 그럼 어떤 설정을 자동화 해줄까?
Spring Boot가 나오기 전 Spring은 서버 셋팅 설정이 엄청 복잡했다고 한다. 개발자의 자유도가 높은 프레임워크라 사용할 라이브러리들을 일일히 Bean으로 만들어줘야하는데 이게 한두가지가 아니었다고 한다. 그래서 Spring Boot는 자주 사용하는 것들을 모아 자동으로 Bean으로 만들어 주는 방법을 택했고 이게 AutoConfiguration다.
AutoConfiguration은 org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일을 찾아 그 안에 적혀있는 것들을 자동 Bean으로 등록해준다.
org.springframwork.boot:spring-boot-autoconfigure
-META-INF-spring- org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일을 열어보면 AutoConfiguration을 해야하는 것들이 엄청 많이 적혀 있는걸 볼 수 있다.
@SpringBootApplication
의 @EnableAutoConfiguration
에 들어가보면 @Import(AutoConfigurationImportSelector.class)
가 있다.
@Import
에는 불러올 클래스들을 직접 넣거나, ImportSelector를 구현한 클래스에서 동적으로 클래스를 불러 올 수 있다. Srping Boot는 AutoConfigurationImportSelector.class에서 org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일들을 찾아 AutoConfiguration을 한다.
AutoConfiguration으로 등록된 객체는 ComponentScan으로 Bean이 되면 안된다.
때문에 Spring boot에서는
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
위 코드와 같이 AutoConfigurationExcludeFilter.class를 통해 AutoConfiguration으로 등록된 객체는 ComponentScan대상에서 제외 시킨다.
한 줄평 : 스프링 부트를 사용할 때 큰 설정을 안해도 서버 구축이 쉬운 이유였다.