티스토리 뷰
반응형
필드 주입도 순환 참조를 검사해 준다?
스프링의 의존성 주입과 관련하여 코드를 작성해 보던 중, 필드 주입 또한 순환 참조를 검사해 주는 것을 확인하여 의문이 생겼다.
기존에 생성자 주입을 권장하는 이유는 빈의 생명주기 중 처음 두 단계 중 1번의 인스턴스 생성을 위한 생성자 호출에서 바로 의존성을 주입해야 하므로 순환 참조를 찾을 수밖에 없기 때문으로 이해했다.
- 빈 객체의 인스턴스 생성 단계
- 의존성 주입 단계
- @PostConstruct나 InitializingBean 인터페이스의 구현 메서드에 의한 초기화 단계
- 스프링 컨테이너 종료 시 @PreDistroy나 DisposableBean 인터페이스의 구현 메서드에 의한 소멸 단계
이번에 새로 경험한 것은 생성자 주입이 아닌 필드 주입과 같은 방법으로 빈을 등록하여도 순환 참조를 검사해 주는 것이었다.
원인은 최신 버전의 스프링 부트
그에 대한 원인을 찾아보니 추가적인 주입 방법들에 대한 검사를 스프링 부트에서 도와주고 있기 때문이었다.
다음은 스프링 부트 2.6의 Release Note의 일부이다.
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes
요약하자면 스프링 부트 2.6부터 기능이 업데이트되어 순환 참조를 기본적으로 금지하게 되었다. 순환 참조가 발생했을 땐 BeanCurrentlyInCreationException을 발생시키며, 이를 허용하기 위해서는 spring.main의 allow-circular-references 옵션을 참으로 바꿔야 한다는 것이다.
반응형
'Web > Spring' 카테고리의 다른 글
logback-spring.xml을 사용해 로그 커스터마이즈하기 (1) | 2023.05.26 |
---|---|
[Spring] 필터와 인터셉터에서 요청에 대한 처리를 어떻게 캐싱할까? (0) | 2023.05.08 |
[Spring] 핸들러(컨트롤러 메서드)는 어떤 우선순위로 선택되는가? (0) | 2023.05.07 |
[Spring] 왜 Random Port의 SpringBootTest에서는 @Transactional 적용이 되지 않을까? (1) | 2023.04.27 |
[Spring] @Autowired와 의존성 주입 (4) | 2023.04.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JPA JSON
- stubbing
- GitHub Discussion 템플릿
- JPA
- 람다식
- GitHub Discussion
- Spring 테스트
- Java
- Fromtail
- 생성자 주입
- Spring Boot Monitoring
- 자바
- Jenkins 예약 배포
- GitHub Discussion Template
- 우테코
- Spring
- 우테코 프리코스
- 함수형 인터페이스
- 우테코 5기
- java switch case
- 스프링
- Payload 암호화
- RandomPort
- MySQL
- multiplebagsfetchexception
- logback-spring.xml
- springboottest
- MySQL 이벤트 스케줄
- 의존성 주입
- invokedynamic
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함