더북(TheBook)

3.5.7 의존성 해석하기

스프링은 정상적으로 동작하는 상황이라면 사용자 구성 파일이나 구성 클래스에 적용된 애너테이션을 보고 의존성을 해석(resolve)할 수 있습니다. 스프링은 이런 방법으로 각각의 빈들이 올바른 순서로 구성될 수 있도록 해서 각각의 빈들의 의존성이 정확하게 주입되게 합니다. 스프링이 이런 과정을 수행하지 않고 순서에 상관없이 빈을 생성하고 구성했다면, 어떤 빈은 자신이 주입받을 의존성이 생성되기도 전에 미리 생성되고 구성될 수도 있습니다. 이는 결코 의도한 상황이 아니며 애플리케이션 내에서 수많은 종류의 문제를 일으킬 것입니다.

안타깝게도 스프링은 구성을 통해서 명시하지 않으면 사용자 빈 사이에 어떤 의존성도 인식하지 못합니다. 예를 들어 Singer 타입인 johnMayer 빈은 자신의 메서드인 johnMayer.sing() 메서드가 호출될 때 ctx.getBean() 메서드를 호출해 Guitar 타입의 다른 빈 인스턴스인 gopher를 얻는다고 생각해 보겠습니다. johnMayer.sing() 메서드는 스프링에 의존성 주입을 요구하지 않고 ctx.getBean("gopher")를 직접 호출해 Guitar 타입의 인스턴스를 얻습니다. 이런 경우에 johnMayergopher에 의존하고 있다는 사실을 스프링이 인식하지 못하므로 결과적으로 gopher 인스턴스가 생성되기 이전에 johnMayer 인스턴스가 생성될 수도 있습니다. <bean> 태그의 depends-on 애트리뷰트를 사용해 빈 의존성과 관련된 추가 정보를 스프링에게 제공할 수 있습니다. 다음 app-context-01.xml 구성 파일은 johnMayer 빈과 gopher 빈의 시나리오에 대한 구성 방법을 보여줍니다.

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