2016년 10월 17일 월요일

spring DispatcherServlet이 강제하는 이름들

boot를 사용하다보면 빈 생성을 참 편하게 할 수 있어 좋다.

ContitionalOnMissingBean 만 확인하고 개별 구현하고 연계처리를 별달리 하지 않아도 알아서 가져가서 써주니 편하다.

하지만 이따금 안되는 케이스들이 있는데 이번에 겪은 경우가 그랬다.

CookieLocaleResolver를 별도로 구현할 일이 있어 생성한 후 빈선언을 해주었는데 디버그를 해보니 acceptHeaderLocaleResolver (기본 LocaleResolver)을 사용하는 것이다.

boot의 설정상으론 해당 빈이 있는 경우 기본 LocaleResolver를 생성하지 않도록 되어 있는데 어째서 그런 것인가 살펴보니 boot가 아닌 spring mvc의 dispatcherServlet이 강제로 bean name을 고정해서 사용하고 있었다.

기본적으로 1개만 등록하는 빈들에 대해서 강제한 사항인 듯 싶다.

다음과 같은 이름들이 고정된 이름들이다.

  • multipartResolver
  • localeResolver
  • themeResolver
  • handlerMapping
  • handlerAdapter
  • handlerExceptionResolver
  • viewNameTranslator
  • viewResolver
  • flashMapManager


이런 빈들에 대해서는 다음과 같이 이름을 지정하고 사용해야 한다.
@Component("localeResolver")
public class MyLocaleResolver extends CookieLocaleResolver {
    // 구현
}

댓글 없음:

댓글 쓰기