본문 바로가기
study/Spring

Spring boot AutoConfiguration 자동구성 작동 원리

by stilinski 2023. 7. 7.
728x90

이 글은 김영한님의 스프링부트 핵심원리와 활용 강의를 듣고 정리한 것입니다.

 

 

자동구성 파트

 

스프링부트의 핵심 기능 중 하나인 자동구성 AutoConfiguration

이것의 작동 원리를 이해하려면 2가지만 알면 된다.

 

@Conditional

@AutoConfiguration

 

---

 

 

@Conditional

 

먼저 @Conditional 부터 정리해 봐야겠다

 

autoconfiguration 디펜던시 안을 보면 많은 것들이 자동으로 등록되게 되어있다.

 

그중 하나인 JdbcTemplate을 보면

@ConditionalOnMissingBean이 있다.

이것의 의미는 지정한 클래스아님 인터페이스의 빈이 없으면 어노테이션이 적용된 클래스를 빈으로 등록하겠다는 것이다.

 

어노테이션에 들어가보면

 

@Conditional 로 구현된 것을 알 수 있는데

어노테이션의 매개변수로 들어간 클래스는 Condition 인터페이스의 matches 메서드를 구현해서 조건을 지정해주어야한다.

저기서 OnBeanCondition도 Condition인터페이스를 구현한 클래스이다.

바로 직접적으로 구현하지는 않았고 타고타고 들어가다보면 결국 Condition 인터페이스를 구현한 것을 확인할 수 있다.

 

간단하게 하면 이런식으로 쓰일 수 있다.

 

 

@AutoConfiguration

스프링 부트가 실행될때 라이브러리들의 resources.META-INF.spring 폴더에 있는

org.~~~~~.Autoconfiguration.imports 파일을 다 뒤짐.

여기엔 @AutoConfiguration 어노테이션이 적용된 클래스의 주소가 있는데,

이걸 인식해서 그 클래스에 정의되어있는 작업을 수행.

이 작업을 하는게 메인 클래스에 있는

@SpringBootApplication 어노테이션임. 

 

이 안에 들어가다보면...

결국엔 ImportSelector가 나오는데 

여기서 select 위의 .imports 파일의 내용을 읽어와서 해당 클래스로 가서 작업수행

 

 

 

이게 .imports 파일의 내용이고

이건 spring boot에서 ImportSelector구현한 클래스에서 위의 파일을 읽어오는 부분이다.

내용이 똑같다는 것을 확인할 수 있다.

 

클래스 내용은 대략 이렇다

728x90

댓글