더북(TheBook)

이런 모호성 문제를 해결하려면 빈 이름을 사용하여 인스턴스 중 하나를 정확하게 참조해야 한다. 기본적으로 스프링은 @Bean으로 주석이 달린 메서드 이름을 빈 이름으로 사용한다. 이것이 바로 동사를 사용하여 @Bean 메서드 이름을 지정하지 않는 이유다. 이때 빈의 이름은 parrot1, parrot2, parrot3이다(메서드는 Bean을 나타낸다). 이런 이름은 예외 메시지의 이전 코드 스니펫에서 찾을 수 있다. 발견했는가? 이름을 사용하여 이런 빈 중 하나를 명시적으로 참조하도록 main 메서드를 변경해 보자. 다음 예제에서 parrot2 빈을 어떻게 참조했는지 살펴볼 수 있다.

예제 2-15 식별자로 빈 참조하기

public class Main {

    public static void main(String[] args) {
        var context = 
            new AnnotationConfigApplicationContext(ProjectConfig.class); 
        Parrot p = context.getBean("parrot2", Parrot.class); ← 첫 번째 매개변수가 참조할 인스턴스 이름이다. 
        System.out.println(p.getName());
    } 
} 
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.