티스토리 뷰
Bean 생성 순서
- Spring : 설정파일을 통해 등록된 bean을 자동적으로 위에서 아래로 bean들을 스캔하여 생성한다.
- Spring Boot : Annotation을 이용해서 bean을 등록하게 되면 패키지에서 존재하는 순서대로(위에서 아래) 스캔하면서 bean을 생성한다. 따라서 알파벳 순서에서 밀린 패키지, 클래스는 생성 순서를 맞춰주지 않는 문제가 생길 수 있을 거라 생각하지만 특정 Bean을 생성하는 도중에 해당 Bean에 주입되는 새로운 Bean을 만나면 이 Bean부터 생성하기 때문에 문제가 되지 않는다.(단, 생성자 주입 방식일 경우에 해당)
위와 같이 XML, @Bean, @Configure, 또는 컴포넌트스캔 방식으로 bean으로 관리할 클래스를 스캔한 뒤 BeanFactory가 reflection을 이용해 bean들을 생성하고 의존관계를 주입한다.
[스프링 부트에서 컴포넌트 스캔방식 + 생성자 주입 방식인 경우]
- Bean 생성자 호출 순서 : controller -> service -> repository (패키지 알파벳 순)
- Bean 생성완료 순서: repository -> service -> controller
[시나리오]
- controller의 생성자를 호출하고 생성자의 parameter를 보고 Bean이면 parameter를 먼저 생성하러 간다.(주입받는 의존성을 먼저 생성)
- 주입받을 의존성을 생성한 뒤 돌아와서 생성자 호출 로직을 이어간다.
cf. @PostConstruct : Bean이 완전히 생성된 이후에 실행되는 콜백 메소드
Bean Life Cycle
1) 스프링 컨테이너 생성
2) 스프링 빈 생성 및 의존관계 주입
3) 초기화 콜백 : 빈이 완전히 생성된 후 호출
4) 빈 사용
5) 소멸전 콜백 : 빈이 소멸되기 직전에 호출
6) 스프링 종료 : Bean 파괴는 생성의 역순임
Ref
- 생성자 기반 DI가 선호되는 이유: https://jh-labs.tistory.com/31
'[ 백엔드 개발 ] > [ Spring ]' 카테고리의 다른 글
<추천글>[JPA] 연관관계 핵심 정리 (JPA의 근본적인 문제) (0) | 2022.01.04 |
---|---|
[JPA] Entity와 기본생성자, Proxy (0) | 2022.01.04 |
[test] Test Double과 Mockito, BDDMockito 프레임워크 (0) | 2021.12.08 |
[spring] Spring MVC, Dispatcher Servlet (0) | 2021.10.18 |
<추천글>[WAS] 웹 서버, WAS, Servlet (1) | 2021.10.17 |
- Total
- Today
- Yesterday
- CICD
- ubuntu
- Java
- jvm
- ci/cd
- Linux
- container
- Controller
- Non-Blocking
- go
- golang
- rolling update
- 컨트롤러
- K8s
- RDB
- 우분투
- db
- Kubernetes
- github actions
- Stream
- spring
- 코틀린
- docker
- 쿠버네티스
- 카프카
- kafka
- LFCS
- Kotlin
- GitOps
- argocd
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |