더북(TheBook)

이 작은 변경만으로도 앱은 다음 코드처럼 더 친숙한 메시지를 출력한다. 스프링이 실제로 새로 생성된 클래스의 구현을 주입했다는 것을 알 수 있다.

Storing comment: Demo comment
Sending push notification for comment: Demo comment ← 기본 구현으로 표시했기 때문에 스프링은 새 구현을 주입한다.

이때 필자가 주로 듣는 질문은 ‘구현체가 두 개 있지만, 스프링은 항상 둘 중 하나만 주입할까? 그렇다면 이 경우에는 왜 두 클래스가 다 필요할까?’라는 것이다.

실제 시나리오에서 이런 상황이 어떻게 발생할 수 있는지 논의해 보자. 이미 알고 있듯이, 앱은 복잡하고 많은 의존성을 사용한다. 특정 인터페이스에 대한 구현을 제공하는 의존성을 사용하지만(그림 4-10), 어느 순간 제공된 구현이 앱에 적합하지 않아 커스텀 구현을 정의하기로 결정할 수 있다. 이때 가장 간단한 해결책은 @Primary를 사용하는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.