2022. 4. 22. 11:43ㆍCSE/Spring
내부에 @EnableAutoConfiguration을 확인할 수 있다.
AutoCOnfiguration기능이 해당 어노이테이션을 통해 이루어지는 것을 볼 수 있다.
(1) @EnableAutoConfiguration
이번에는 @EnableAutoConfiguration 안으로 들어오면 다음과 같다.
Import 하는 부분이 있다.
AutoConfigurationImportSelector이 import 되고 있는데 해당 클래스가 진짜 Autoconfiguration이 일어나게 하는 클래스이다.
AutoConfigurationImportSelector 클래스 안으로 들어오면 다음 메소드를 찾을 수 있다.
해당 부분에 debug를 해보면 다음과 같은 사실들을 확인할 수 있다.
getCandidateConfiguration을 통해 AutoConfiguration 목록을 가져온다.
getCandidateConfiguration 메소드
해당 메소드를 열어보았다!
SpringFactoryLoader를 통해 configurations 리스트를 받아오는 걸 볼 수 있다.
따라서 loadFactoryNames도 열어보면 다음을 확인할 수 있다.
위에 쓰여질 설명을 보면 META-INF/spring.factories를 통해 Configuration을 읽어온다는 것을 알 수 있다.
해당 파일에는 인터페이스와 해당 인터페이스의 구현체들을 확인할 수 있다.
checkExcludedClass(), removeAll(), getConfigurationClassFilter()
exclude한 것이 있다면, 해당 부분을 제외하기 위해 checkExcludedClasses, removeAll 메소드를 실행한다.
디버그 도중 getConfigurationClassFilter()의 filter() 메소드로 들어가면 다음과 같다.
for문에서 this.filters를 확인할 수 있는데, filters에 해당하는 부분은 다음 세가지였다.
OnClassCondition
OnWebApplicationCondition
OnBeanCondition
filter를 걸면 131개였다가 31개로 줄은 것을 확인할 수 있다.
(2) 인터페이스 구현체 살펴보기
구현체들 중 하나인 JdbcTemplateAutoConfiguration 클래스를 확인해보자.
그 중, @ConditionalOnClass 어노테이션을 확인해보면 다음과 같다.
그리고 다음과 같은 설명을 볼 수 있다.
즉, Conditional이 매치가 될 때만 Application Context에 등록이 된다는 의미임을 확인할 수 있다.
매치가 된다는 의미는 해당 클래스들이 classpath에 존재한다는 의미이다.
그리고 JdbcTemplateAutoConfiguration 클래스의 Import 어노테이션에 있는 JdbcTemplate Configuration을 들어가보면 실질적인 Bean이 있는 것을 확인할 수 있다.
(3) 최종 결론
이를 통해 @SpringBootApplication이 AutoConfiguration에 의해서 Bean 설정들을 특정 조건에 맞게 자동화해주는 것을 알 수 있다.
'CSE > Spring' 카테고리의 다른 글
@SpringJUnitConfig 어노테이션이란? (0) | 2022.04.26 |
---|---|
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 (0) | 2022.01.21 |
Spring과 Spring Boot의 차이점 (0) | 2022.01.19 |
내가 이해한 기본 MVC 패턴 (계속 추가 예정) (0) | 2022.01.18 |
[Spring5입문] DB 연동 (0) | 2021.09.14 |