ApplicationContext가 갖고있는 또다른 기능인 MessageSource에 대해 알아보겠다.
ApplicationContext가 MessageSource 인터페이스를 구현한다.
i18n와 관련된 기능인데 메세지를 다국화 하는 기능이다.
스프링 부트를 사용한다면 아래 두개를 바로 만들어 사용할 수 있다.
AppRunner.java1 2 3 4 5 6 7 8
| public class AppRunner implements ApplicationRunner{ @Autowired MessageSource messageSource; ...run(){ print(messageSource.getMessage("greeting",new String[]{"sangheon"},Locale.KOREA)); print(messageSource.getMessage("greeting",new String[]{"sangheon"},Locale.getDefault())); } }
|
동작원리?
ResourceBundleMessageSource라는 빈이 메세지를 읽어들인다.
직접 MessageSource를 정의해보자
ReloadableResourceBundleMessageSource는 reload가 가능한 것으로서 운영중에 메세지 변경이 가능하다. 즉 프로그램 런타임 중에 빌드를 다시해주면 변경된다.
1 2 3 4 5 6 7 8
| @Bean public MessageSource messageSource() { var messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:/messages"); messageSource.setDefaultEncoding("UTF-8"); messageSource.setCacheSeconds(3); return messageSource; }
|