Spring Application 을 실행할 때,
Scope value 가 request 인 bean 을 그대로 의존관계를 형성하게 되면
Request 가 발생하지 않아서 bean 이 생성되지 않았지만, 스프링 컨테이너에서는 초기에 의존 관계를 전부 주입해주기 때문에
request bean 을 주입해주지 못해서 발생하는 오류이다.
해결방법에는
1. ObjectProvider<> 를 사용하는 방법
2. 프록시 객체를 사용하는 방법
이 있다.
1. ObjectProvider<> 를 사용하는 방법
해당 bean 의 의존성 주입을 ObjectProvider 를 이용해 주입하게 되면
호출될 때까지 의존성 주입을 미루고 호출이 되면 ObjectProvider.getObject() 를 통해
bean 을 생성할 수 있다.
2. 프록시 객체를 사용하는 방법
해당 bean 이 Class 일 경우 TARGET_CLASS,
interface 일 경우 ScopedProxyMode.INTERFACES 옵션을 추가해주면 된다.
프록시모드를 설정해주면 스프링 컨테이너에서 의존성 주입시에 가짜 객체가 등록되며
실제 로직이 필요할 떄, 가짜 객체인 프록시 객체가 진짜 객체의 메서드를 호출하는 방식으로 작동한다.
이 방법을 활용하면 기존 의존성 문제가 발생하던 부분의 코드를 건드리지 않고
해당 bean의 Scope 옵션만 추가해주면서 문제를 해결할 수 있다.
'오류 해결 내용' 카테고리의 다른 글
ssh 원격 접속 에러 (0) | 2023.03.31 |
---|---|
zsh: permission denied: ./h2.sh (0) | 2023.01.24 |
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun (0) | 2023.01.17 |
IntStream flatMap() 관련 오류 해결 내용 정리 (0) | 2022.12.01 |
댓글