더북(TheBook)

4.8.1.3 ApplicationContext를 MessageSource로 사용하는 이유

이 질문에 대답을 하려면 조금 앞으로 돌아가 스프링의 웹 애플리케이션 지원 기능을 살펴봐야 합니다. 일반적인 경우라면 이 질문의 답은 빈을 “불필요하게 ApplicationContext에 결합시키기 때문에 ApplicationContextMessageSource로 사용하지 말아야 한다”일 것입니다(다음 절에서 상세하게 살펴봅니다). 스프링 MVC 프레임워크를 사용해 웹 애플리케이션을 만들 때만 메시지를 가져오는 데 ApplicationContext를 사용해야 합니다.

스프링 MVC의 핵심 인터페이스는 Controller입니다. 컨트롤러가 구상 클래스를 상속해야 하는 스트럿츠(Struts) 같은 프레임워크와는 다르게 스프링에서는 간단히 Controller 인터페이스를 구현하거나 컨트롤러 클래스에 @Controller 애너테이션을 적용하면 됩니다. 스프링은 개발자가 컨트롤러 구현에 사용할 수 있는 유용한 기반 클래스 모음을 제공합니다. 이 기반 클래스들은 직접적이든 직접적이지 않든 ApplicationObjectSupport 클래스의 자식 클래스인데, 이 ApplicationObjectSupport 클래스는 ApplicationContext를 사용하려는 모든 애플리케이션 객체에게 ApplicationContext 접근을 가능하게 해주는 편리한 부모 클래스입니다. 웹 애플리케이션 설정에서는 ApplicationContext가 자동으로 실행된다는 점을 기억하기 바랍니다.

ApplicationObjectSupport는 내부에서 ApplicationContext에 접근하고 이 ApplicationContextMessageSourceAccessor 객체로 감싸줍니다. 이렇게 하면 웹 애플리케이션의 컨트롤러가 protected로 선언된 getMessageSourceAccessor() 메서드를 사용해 ApplicationObjectSupport 내부의 MessageSourceAccessor에 접근할 수 있습니다. MessageSourceAccessorMessageSource 인스턴스를 편리하게 사용할 수 있도록 다양한 메서드를 제공합니다. 이런 유형의 자동 주입은 매우 편리합니다. 모든 컨트롤러에 MessageSource 프로퍼티를 노출하지 않아도 되기 때문입니다.

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