작성
·
273
1
먼저 양질의 강의를 제공해주신 점에서 매우 감사하다는 말씀을 드리고 있습니다.
강의에서 /app란 값을 @Value로 주입을 해줬을때 ${contextPath}만 출력이 되는 부분에 질문이 있습니다.
제가 이해하기로는 커스텀 빈들이 먼저 주입이 되기 때문에 실제로 스프링부트의 인프라스트럭처 빈인 PropertySourcesPlaceholderConfigurer가 주입이 되지 않아 ${contextPath}가 나온다고 이해를 했습니다.
제가 이해한게 맞다면 빈의 주입 순서에 따라 @Value의 값이 달라진다는 것인데, 만약 tobyspring.config.autoconfig.PropertyPlaceholderConfig 이 클래스가 tobyspring.config.autoconfig.TomcatWebServerConfig 이 클래스보다 더 늦게 주입이 된다면 여전히 ${contextPath}가 나오게 되는지 궁금합니다!
또한 테스트를 한 번 해보고싶어서 계속해서 시도해봤지만 테스트 방법이 도저히 감이 오질않는데, 이럴 때는 어떻게 테스트를 하면 되는지 알 수 있을까요?
답변 1
2
PropertySourcesPlaceholderConfigurer는 빈으로 등록이 되었는지 아닌지만 중요합니다. 빈 등록 순서는 관련이 없습니다.
내부적으로 BeanFactoryPostProcessor를 구현하고 있는데 이를 스프링 컨테이너가 발견하면 빈 오브젝트를 생성하기 전에 빈 등록정보를 처리할 수 있게 해주는 빈을 만들 때 사용합니다. 이를 통해서 ${} 치환자로 설정된 빈의 프로퍼티를 찾아서 Environment로부터 가져오는 프로퍼티 값으로 치환해주는 것입니다.