더북(TheBook)

필자가 수업에서 이 방식을 가르칠 때마다 어떤 사람들은 이렇게 질문한다. “이렇게 하면 Parrot 인스턴스(그림 3-5) 두 개가 생성되는 것 아닌가요?” 하나는 스프링이 생성하여 컨텍스트에 추가하는 인스턴스고, 다른 하나는 person() 메서드가 parrot() 메서드를 직접 호출할 때 인스턴스가 생성되는 것이 아니냐고 생각할 수도 있지만 그렇지 않다. 실제로 이 애플리케이션에는 전체적으로 단 하나의 Parrot 인스턴스만 있다.

처음에는 이상하게 보일 수 있지만 parrot() 메서드를 호출하면 스프링은 스프링 컨텍스트의 앵무새 빈을 참조하고 싶어 한다는 것을 알아챌 만큼 똑똑하다. @Bean 애너테이션으로 스프링 컨텍스트에 빈을 정의하면 스프링은 메서드가 호출되는 방식을 제어하고 메서드 호출 위에 로직을 적용할 수 있다(6장에서 스프링이 메서드를 가로채는 방법을 자세히 알아볼 것이다). 지금은 다음 설명처럼 person() 메서드가 parrot() 메서드를 호출할 때 스프링이 로직을 적용한다는 점을 기억하자.

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